首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

基于函数的索引在oracle 12c中不起作用

基于函数的索引在Oracle 12c中不起作用是因为Oracle 12c不支持在函数上创建索引。在Oracle数据库中,索引是用于加快查询速度的数据结构,它可以提高查询的效率。然而,对于函数,Oracle 12c无法直接在函数上创建索引。

函数是一种在数据库中执行特定操作并返回结果的可重用代码块。在查询中使用函数可以对数据进行转换、计算和处理。然而,由于函数的执行是动态的,函数的结果可能会随着输入参数的变化而变化,这使得在函数上创建索引变得困难。

虽然在Oracle 12c中无法直接在函数上创建索引,但可以通过其他方式来优化查询性能。以下是一些可能的解决方案:

  1. 使用函数索引:如果函数的结果是稳定的,并且经常在查询中使用,可以考虑将函数的结果存储在一个列中,并在该列上创建索引。这样可以避免在每次查询时都执行函数。
  2. 优化查询语句:通过优化查询语句的结构和使用合适的索引,可以提高查询性能。可以使用Oracle提供的查询优化工具,如执行计划和索引提示,来帮助优化查询。
  3. 使用物化视图:物化视图是预先计算和存储的查询结果,可以提高查询性能。可以将函数的结果存储在物化视图中,并在物化视图上创建索引。
  4. 重新设计数据模型:如果函数的使用频率很高,并且对查询性能有重要影响,可以考虑重新设计数据模型,将函数的结果存储为一个列,以便可以直接在该列上创建索引。

总之,在Oracle 12c中,基于函数的索引不起作用,但可以通过其他方式来优化查询性能。具体的解决方案应根据具体情况进行评估和选择。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【DB笔试面试550】在Oracle中,函数索引是什么?

♣ 题目部分 在Oracle中,函数索引是什么?...♣ 答案部分 在Oracle中,有一类特殊的索引,称为函数索引(Function-Based Indexes,FBI),它基于对表中列进行计算后的结果创建索引。...函数索引在不修改应用程序的逻辑基础上提高了查询性能。如果没有函数索引,那么任何在列上执行了函数的查询都不能使用这个列的索引。当在查询中包含该函数时,数据库才会使用该函数索引。...② 如果被函数索引所引用的用户自定义PL/SQL函数失效了或该函数索引的属主没有了在函数索引里面使用的函数的执行权限,那么对这张表上的执行的所有的操作(例如SELECT查询、DML等)也将失败(会报错:...QUERY_REWRITE_INTEGRITY = ENFORCED QUERY_REWRITE_ENABLED = TRUE(从Oracle 10g开始默认为TRUE) 这里举一个基于函数的索引的例子

1.5K10
  • 在Oracle 12c中,在RMAN方面有哪些增强的新特性?

    今天小麦苗给大家分享的是在Oracle 12c中,在RMAN方面有哪些增强的新特性?。 在Oracle 12c中,在RMAN方面有哪些增强的新特性?...同样地,在Oracle 12c中引入了3个新的系统用户SYSBACKUP、SYSDG和SYSKM,其中,SYSKM可以执行与透明数据加密密钥(Transparent Data Encryption keystore...(二)可以直接在RMAN中执行SQL语句 在Oracle 12c中,可以在不需要SQL前缀的情况下在RMAN中执行任何SQL和PL/SQL命令。当然,原来的加SQL前缀的方式依然有效。...; RMAN> ALTER SYSTEM SWITCH LOGFILE; (三)在RMAN中提供了表级别恢复(RECOVER TABLE) 在Oracle 12c中,在发生drop或truncate的情况下...(五)通过网络远程恢复数据库(Restore/Recover from Service) 在Oracle 12c中,可以在主数据库和备用数据库之间用一个服务名重新获得或恢复数据文件、控制文件、参数文件(

    89720

    实践实战:在PoC中的Oracle 12c优化器参数推荐

    优化器是 Oracle 数据库的核心组件,我们一起来看一看 12c 有哪些优化器的变化。 ?...基于在执行过程中获得的真实统计信息,优化器动态调整执行计划的能力可以极大地提高查询性能。...下图展示了一个最常见的场景,基于静态统计信息,Oracle选择了 Nest Loop的执行计划,当执行中动态统计信息(自适应统计信息)被收集之后,SQL的执行计划自动变更为 Hash Join 的执行方式...在 Oracle 12.2 和 18c 中,推荐的缺省行为都已改变,自适应的执行计划,缺省未开启的自适应统计信息: ?...在 12c 和 18c 中,SQL计划管理的演变是自动化的: - 如果您正在使用SQL计划管理(SPM),则替代计划可能会自动演变并被接受 - 您可能想要禁用自动优化作业或防止接受新计划... ?

    1K40

    Oracle 12c系列(十) | 12c中的Recovering Tables and Table Partitions

    在Oracle12c之前的版本中,rman进行数据恢复时只能进行database/tablespace/datafile/block四种级别的恢复,如果误操作删除某张表或表中数据,无法通过闪回进行数据还原时...,且有完整备份以及归档,该种情况下可以进行表空间时间点恢复,但恢复方式较麻烦,在Oracle12c中,Oracle对rman功能进行了增强,除了之前的四种级别的恢复,rman也提供了表/表分区级别的恢复...2.在辅助实例中通过备份集对需要恢复的表/表分区所在的数据文件进行restore。 3.recover until scn/timestamp/sequence number。...4.通过数据泵功能将需要恢复的表在辅助数据库中导出到指定目录下。 5.将需要恢复的表导入到生产库中。 6.清理辅助数据库。...在恢复表的过程中观察服务器中的后台实例情况,可以发现为EyDp的SID的辅助数据库,该库即为恢复表时自动创建的辅助数据库,如下: [oracle@node1 ssd2]$ ps -ef | grep pmon

    89420

    【DB笔试面试432】在Oracle 12c中,在RMAN方面有哪些增强的新特性?

    题目 在Oracle 12c中,在RMAN方面有哪些增强的新特性?...答案 Oracle 12C的RMAN中新增了很多的新特性,分别如下所示: (一)新的备份用户特权(SYSBACKUP) 在Oracle 11gR2中,引入了SYSASM特权用来执行与ASM相关的特定操作...同样地,在Oracle 12c中引入了3个新的系统用户SYSBACKUP、SYSDG和SYSKM,其中,SYSKM可以执行与透明数据加密密钥(Transparent Data Encryption keystore...(二)可以直接在RMAN中执行SQL语句 在Oracle 12c中,可以在不需要SQL前缀的情况下在RMAN中执行任何SQL和PL/SQL命令。当然,原来的加SQL前缀的方式依然有效。...; RMAN> ALTER SYSTEM SWITCH LOGFILE; (三)在RMAN中提供了表级别恢复(RECOVER TABLE) 在Oracle 12c中,在发生drop或truncate的情况下

    87220

    在Oracle中,索引是否必须定期重建?索引重建有哪些影响?

    题目部分 在Oracle中,索引是否必须定期重建?索引重建有哪些影响? ♣ 答案部分 一般而言,极少需要重建B树索引,基本原因是B树索引很大程度上可以自我管理或自我平衡。...聚簇因子可以反映给定的索引键值所对应的表中的数据排序情况。重建索引不会对聚簇因子产生影响,要改变聚簇因子只能通过重组表的数据。...若是重建索引,则建议对以下的索引进行重建: ① 在分析(ANALYZE)指定索引之后,查询INDEX_STATS的HEIGHT字段的值,如果HEIGHT>=4即索引深度超过3级,那么最好重建(REBUILD...为此,Oracle在Mos中给出了相关分析的脚本:“研究 b-tree 索引结构的脚本 (文档 ID 1577374.1)”。...这个脚本将根据已存在的表和索引的统计信息来核实B-Tree索引结构,并可以估计索引的理论大小和索引布局,而且该脚本会将收集的信息以历史记录的形式保存在INDEX_HIST表中。

    1.5K10

    oracle 12c数据库在Windows环境下的安装

    安装     首先我们需要下载一个oracle 12c的安装程序,解压后右键点击“setup”可执行程序,以管理员身份运行程序,出现下面检测系统配置界面 ? ? 去掉勾选后,点击下一步 ?     ...安装的oracle服务仅作为测试的话,可以将所有管理员的密码都统一设置为一个,避免后续忘记 ?     我配置的是一个弱密码,所以出现了如下提示,可以不必理会,在弹出的提示框中点击“是” ?     ...在安全/用户中点击创建用户 ?     *注:账户状态中时间图标代表密码失效,小锁图标代表用户锁定     新建用户的状态如下所示: ?...我们在oracle官方的客户端连接工具上测试一下,在软件目录中的点击“SQL Developer” ?     创建本地连接,配置好连接参数后,能够连接成功 ?...其他     如何重启监听服务         在cmd中输入“netca”,之后一路点击next完成重启     用户解锁         打开SQL plus程序,使用sys as sysdba用户登录

    1.2K20

    【DB笔试面试566】在Oracle中,什么是索引分裂?

    ♣ 题目部分 在Oracle中,什么是索引分裂? ♣ 答案部分 索引分裂(Index Block Split),就是索引块的分裂。...在分裂的过程中前台进程需要等待分裂完成之后才能继续操作。...当索引分裂发生时,负责实施分裂的进程会持有相关的队列锁,直到该进程完成分裂操作才会释放该队列锁。在这个过程中负责分裂的进程需要找到合适的新块并将对应的数据移动到该新块中。...REBUILD ONLINE REVERSE; 在发生索引分裂等待的时候,也可以根据需要将索引改造为分区索引。通过HASH将索引分成一个一个小块,这样竞争就不会聚集在最右边的节点上。...& 说明: 有关索引分裂的内容可以参考我的BLOG:http://blog.itpub.net/26736162/viewspace-2139232/ 本文选自《Oracle程序员面试笔试宝典》,作者:

    69130

    Oracle中索引位图转换的优势

    第一章 Oracle索引位图转换介绍 1.1 索引位图转换 首先介绍一下索引位图转换概念: 索引位图转换是优化器对目标表上的一个或多个目标索引执行位图布尔运算。...Oracle数据库里有一个映射函数(Mapping Function),它可以实现B树索引中ROWID和对应位图索引中的位图之间互相转换。目的是对相同ROWID做AND、OR等连接运算。...最后将布尔运算的结果再次用映射函数转换成了ROWID并回表得到最终的结果。 1.2 性能分析 根据我们以往的经验,用映射函数将ROWID转换成位图,这期间可能访问了多个索引,甚至一个索引会访问N多次。...最后再将运算结果转换为ROWID并回表,这个过程在实际生产环境中的执行效率往往是有问题的,我们可以通过隐藏参数_b_tree_bitmap_plans禁掉该过程中从ROWID到位图的转换。...分析这样的优势: IN条件中多个值会分别被访问并与索引中的数据作比较,条件中的多个值也不会访问索引多次,执行效率较高。通过逻辑读部分也能确定。

    96430

    【DB笔试面试551】在Oracle中,位图索引是什么?

    ♣ 题目部分 在Oracle中,位图索引是什么? ♣ 答案部分 位图索引(Bitmap Indexes)是一种使用位图的特殊数据库索引。它针对大量相同值的列而创建,例如:类别、型号等。...在传统的B-Tree索引中,一个索引条目指向单个行,但是在位图索引中,每个索引键存储指向多个行的指针。相对于B-Tree索引,位图索引占用的空间非常小,创建和使用速度非常快。...创建位图索引的语法很简单,就是在普通索引创建的语法中的INDEX前加关键字BITMAP即可,如下所示: CREATE BITMAP INDEX IDX_SEX_LHR ON T_USER(SEX); 关于位图索引...⑧ 在同一列上建立位图索引后就不能再建立普通索引了,但是可以建立函数索引,位图索引可以和函数索引同时建立。 ⑨ 做UPDATE代价非常高。 ⑩ 基于规则的优化器不会考虑位图索引。...可以使用如下的SQL语句查询数据库中的所有位图索引: SELECT * FROM DBA_INDEXES D WHERE D.INDEX_TYPE='BITMAP'; 本文选自《Oracle程序员面试笔试宝典

    1.7K20

    【DB笔试面试557】在Oracle中,压缩索引是什么?

    ♣ 题目部分 在Oracle中,压缩索引是什么? ♣ 答案部分 Oracle数据库可以使用键压缩(Key Compression)来压缩B-Tree索引或索引组织表中的主键列值的部分。...键压缩可以大大减少索引所使用的空间,使用了键压缩的索引称为压缩索引。对索引进行压缩更多的意义在于节省存储空间,减少I/O时间。...可以使用如下的SQL将索引重建为压缩或非压缩的索引: ALTER INDEX EMPLOYEE_LAST_NAME_IDX REBUILD NOCOMPRESS;--非压缩 ALTER INDEX EMPLOYEE_LAST_NAME_IDX...REBUILD COMPRESS;--压缩 所有的压缩索引可以通过如下的SQL语句获取: SELECT * FROM DBA_INDEXES D WHERE D.COMPRESSION='ENABLED...'; 本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。

    63920

    【DB笔试面试556】在Oracle中,虚拟索引的作用有哪些?

    ♣ 题目部分 在Oracle中,虚拟索引的作用有哪些? ♣ 答案部分 在数据库优化中,索引的重要性是不言而喻的。...但是,在性能调整过程中,一个索引是否能被查询用到,在索引创建之前是无法确定的,而创建索引是一个代价比较高的操作,尤其是当数据量较大的时候。这种情况下,创建虚拟索引是一个很好的选择。...虚拟索引(Virtual Index)是定义在数据字典中的伪索引,但没有相关的索引段。虚拟索引的目的是模拟索引的存在而不用真实的创建一个完整索引。...Oracle文档中并没有提到虚拟索引的创建语法,实际上就是普通索引语法后面加一个NOSEGMENT关键字即可,B-Tree索引和BITMAP索引都可以被创建成虚拟索引。...,而RBO(Rule Based Optimization,基于规则的优化器)模式无法使用虚拟索引。

    55120

    【DB笔试面试562】在Oracle中,如何监控索引的使用状况?

    ♣ 题目部分 在Oracle中,如何监控索引的使用状况?...♣ 答案部分 在开发应用程序时,可能会建立很多索引,那么这些索引的使用到底怎么样,是否有些索引一直都没有用到过,在这种情况下就需要对这些索引进行监控,以便确定它们的使用情况,并为是否可以清除它们给出依据...,分析索引的使用情况 可以从视图DBA_HIST_SQL_PLAN中获取到数据库中所有索引的扫描次数情况,然后根据扫描次数和开发人员沟通是否需要保留索引。...从图中可以看到有一个3.6G大的索引在13号到22号从没使用过,接下来,可以继续查询该索引是否是联合索引,创建是否合理,分析为何不走该索引,从而判断是否可以删除索引。...& 说明: 有关索引的监控过程可以参考我的BLOG:http://blog.itpub.net/26736162/viewspace-2120752/ 本文选自《Oracle程序员面试笔试宝典》,作者:

    1.3K20

    row_number()分析函数在12c版本的bug

    客户的一套重要业务数据库(版本12.1.0.2),偶尔会出现CPU比较高的情况(下面信息是从一个长间隔AWR报告截取),最高时候的CPU使用率是正常时段的15倍以上: 再取其中一段CPU...事后了解到,这是个统计业务,使用频率较低, 业务人员在使用时发现SQL执行时间长也没有反馈,而且执行时间长短跟统计的时间间隔大小有关,统计一两天也能在几十分钟内完成, 统计一个月可能就要几个小时....代码段, 是一个使用了row_number()分析函数的inline view: 在相同版本的环境进行模拟,错误能够重现: 相同的SQL,在11.2.0.3 版本和12.2.0.1 版本...到MOS检索相关信息(关键字: wrong Cardinality row_number) ,找到已知bug信息,Doc ID. 21971099.8 : Bug 21971099 - 12c wrong...14826303:off'; 系统级别: 改参数(可不用重启,立即生效) alter system set "_fix_control"='14826303:off'; 总结: 类似的隐患我相信在很多系统都存在

    42320

    【DB笔试面试553】在Oracle中,什么是不可见索引?

    ♣ 题目部分 在Oracle中,什么是不可见索引? ♣ 答案部分 索引维护是DBA的一项重要工作。...在Oracle 11g里,Oracle提供了一个新的特性来降低直接删除索引或者禁用索引的风险,那就是不可见索引(Invisible Indexes)。 从Oracle 11g开始,可以创建不可见索引。...不可见索引是从Oracle 11g开始出现的,所以,在Oracle 11g之前的版本中索引没有INVISIBLE的功能,那么应该如何处理呢?...现在Oracle数据库一般都采用基于成本的优化器来生成执行计划,只要索引的成本更低,Oracle就会选择使用索引,所以,只要告诉Oracle使用索引成本很高,它就不会使用这个索引,这样就达到了暂时让索引不可用的效果...Oracle提供了DBMS_STATS包来管理对象的统计信息,通过DBMS_STATS.SET_INDEX_STATS函数可以强制设置索引的统计信息,现在只要把索引的成本设置成非常大即可。

    66220

    【DB笔试面试552】在Oracle中,位图连接索引是什么?

    ♣ 题目部分 在Oracle中,位图连接索引是什么? ♣ 答案部分 位图连接索引(Bitmap Join Indexes)是建立在两个或更多表的连接之上的位图索引。...对于表列中的每个值,索引存储被索引表中的相应行的ROWID。相比之下,在标准位图索引中,索引是建立在一个表上的。在数据仓库环境中使用这种索引可以改进连接维度表和事实表的查询性能。...创建位图连接索引时,标准方法是连接索引中常用的维度表(Dimension)和事实表(Fact)。当用户在一次查询中结合查询事实表和维度表时,就不需要执行连接,因为在位图连接索引中已经有可用的连接结果。...位图连接索引有如下几点限制: ① 只可以索引维度表中的列。 ② 用于连接的列必须是维度表中的主键或唯一约束;如果是复合主键,那么必须使用连接中的每一列。...本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。

    1K20

    【DB笔试面试554】在Oracle中,分区索引分为哪几类?

    ♣ 题目部分 在Oracle中,分区索引分为哪几类?...索引分区最主要的原因是可以减少所需读取的索引的大小,另外把分区放在不同的表空间中可以提高分区的可用性和可靠性。在使用分区后的表和索引时,Oracle还支持并行查询和并行DML。...(一)本地分区索引(Local Partitioned Indexes) 本地分区索引也叫局部分区索引。在本地分区索引中,索引基于表上相同的列来分区,与表分区具有相同分区数目和相同的分区边界。...每个索引分区仅与底层表的一个分区相关联,所以,一个索引分区中的所有键都只引用存储在某个单一表分区中的行。通过这种方式,数据库会自动同步索引分区及其关联的表分区,使每个表和索引保持独立。...④ 全局索引多应用于OLTP系统中。 ⑤ 全局分区索引只按RANGE或者HASH分区,HASH分区是Oracle 10g以后才支持的。

    91910
    领券