比如执行如下一条SQL语句:select * from emp where upper(ename) = 'KING',即使在ename上建立了索引,还是会全表扫描emp表,将里面的ename字段改成大写跟常量KING进行比较。如果我们建立一个基于函数的索引,比如:create index emp_upper_idx on emp(upper(ename)); 这个时候,我们只需要按区间扫描小部分数据,然后获取rowid取访问表中的数据,这个速度是比较快的。
基于函数的索引,类似于普通的索引,只是普通的索引是建立在列上,而它是建立在函数上。当然这回对插入数据有一定影响,因为需要通过函数计算一下,然后生成索引。但是插入数据一般都是少量插入,而查询数据一般数据量比较大。为了优化查询速度,稍微降低点插入速度是可以承担的。
函数索引还有一个功能,只对部分行建立索引。假设有一个很大的表,有一列叫做FLAG,只可能取Y和N。假设大部分数据是Y,小部分数据是N,我们需要将N修改成Y。如果建立一个普通索引,这个索引会非常大,而且将N修改成Y的时候,维护这个索引开销会很大。不过这个表听起来比较适合位图索引,但这是一个事物系统(OLTP),可能有很多人同时插入记录,或者进行修改。那么位图索引也不适合。所以,如果我们只是在值为N的行上建立索引,就比较好办了。
只在值为N的行建立索引SQL:create index flag_index on big_table(case flag when 'N' then 'N' end);这样一个索引大小会大大降低,而且维护成本也会很低的。前提是我们只对值为N的行感兴趣。
分享到:
相关推荐
- **函数索引(Function-Based Index)**: 允许基于函数的结果创建索引,使得对函数结果的查询能利用索引。 - **唯一索引(Unique Index)**: 确保索引键的唯一性,与唯一约束相似,但不强制非空。 - **分区索引...
3. **函数操作**: 如果在索引列上使用了函数,比如`SELECT * FROM t WHERE lower(column) = 'value'`,Oracle将不会使用索引,除非你为该函数创建了函数索引。这是因为函数操作改变了原始列的值,使得索引无法直接...
Oracle数据库中的函数是SQL和PL/SQL编程的重要组成部分,它们被用来处理和转换数据,以满足各种查询和操作的需求。本篇文章将详细讲解Oracle中的单行函数和组函数,特别是如何在实际应用中使用它们。 单行函数是...
函数索引(Function-Based Index, FBI),是Oracle数据库自Oracle 8i版本引入的一种特殊类型的索引。它允许在创建索引时使用任意内置或用户自定义的函数对表中的列进行处理,从而为特定的查询条件提供更高效的访问...
### ORACLE CRC32函数详解 #### 一、概述 在Oracle数据库中,`CRC32`函数是一种非常实用的功能,主要用于将字符类型的数据转换为一个唯一的数字类型,这一过程通常被称为散列(Hash)。通过该函数,可以方便地生成...
"Oracle函数大全(CHM格式).rar"这个压缩包显然包含了关于Oracle数据库中各种函数的详细信息,对于学习和查询Oracle函数是非常宝贵的资源。 CHM(Compiled Help Manual)格式是一种由Microsoft开发的帮助文件格式...
Oracle字符相似度函数是Oracle数据库系统提供的一种功能,用于评估两个字符串之间的相似性。这个功能在数据清洗、信息检索、文本分析等领域具有广泛的应用。在SQL查询中,我们可以直接使用这些函数来比较不同字符串...
在数据库领域,Oracle和PostgreSQL都是非常知名的开源关系型数据库管理...然而,全面的兼容性不仅限于函数层面,还需要考虑SQL语法、存储过程、触发器、索引、分区表等方面,这需要根据实际情况进行深入研究和规划。
索引优化方法有多种,包括重新设计索引、避免系统排序和使用函数索引等。重新设计索引可以避免全表扫描操作,降低资源消耗,缩短执行时间。避免系统排序可以减少排序操作的时间和空间消耗。使用函数索引可以提高查询...
Oracle 分区基于“分而治之”的理念,将大表和索引划分为多个小的逻辑部分,每个部分称为分区。这种策略有助于减少单个表的管理复杂性,提高I/O性能,并增强系统并行处理能力。当数据量过大时,通过分区可以将查询...
函数索引允许对列的函数结果进行索引,比如创建一个基于日期列的年份索引。这使得可以快速查找特定年份的数据,但要注意,不是所有函数都支持创建索引,只有那些确定性和非重叠的函数才适用。 五、索引的创建与管理...
Oracle支持多种类型的索引,包括B树索引、位图索引、函数索引和唯一索引等。B树索引是最常见的索引类型,适用于大部分场景,其结构使得查找、插入和删除操作的时间复杂度较低。位图索引则适合于值分布稀疏的列,例如...
4. 函数索引:基于列上的函数结果创建的索引,可用于优化包含函数的查询。 5. 唯一索引:确保索引列中的每个值都是唯一的,有助于保证数据的唯一性。 6. 复合索引:包含多个列的索引,适用于多个列组合的查询。 7. ...
### Oracle数据库基于索引SQL优化方法的研究与实现 #### 一、引言 随着信息技术的发展,数据库管理系统(DBMS)在企业级应用中的地位越来越重要。Oracle数据库作为一种高性能的关系型数据库管理系统,在众多领域得到...
本篇文章将深入探讨Oracle中的B*Tree索引、反向索引、降序索引、位图索引和函数索引。 1. **B*Tree索引**: - B*Tree索引是Oracle中最常见的索引类型,其结构类似于二叉树,可以高效地处理高基数数据列,即具有...
通过以上示例,我们学习了Oracle数据库中索引的基本使用方法以及一些高级特性,如分区表索引、唯一索引、函数索引等。此外,还了解了如何通过实际的数据操作来测试索引的性能效果。这些知识点对于深入理解和掌握...
- Function-Based索引:基于函数的结果创建索引,索引列是函数的输出。 - Reverse索引:反向键索引,用于存储数据的反向副本,提高某些查询性能。 - Unique索引:确保列中的值是唯一的。 - Index-Organized ...
函数索引是Oracle 8i以来的创新,它允许在索引中存储基于列值计算的结果,而不是直接的列值。这种索引特别适用于包含复杂函数表达式的查询条件,如`WHERE function(column) = value`。通过预先计算并存储计算结果,...
Oracle全文索引是一种特殊类型的索引,它主要用于提高基于文本的查询性能。自从Oracle 7.3版本开始引入了这一特性,允许用户通过Oracle服务器提供的上下文(ConText)选项来执行基于文本的数据查询。随着版本的迭代...