Oracle还是比较常用的,Oracle函数索引在某些情况下也是非常有用的。
一.Oracle函数索引
1.Oracle函数索引的好处:Exp: function(column1) 如果表中有1000行,即便column1列上建有索引,索引在此时也不被使用,function会执行1000次。
2.建立Oracle函数索引会使插入/更新性能稍有下降,但是查询速度有了极大的提高。另外如果更新的时候没有涉及到建立Oracle函数索引的这个列,那就不会产生额外的开销。
3.部分行建立索引:
1)某一列只有很少的基数,例如只有Y和N
2)通常只会查询where column1 = ‘N’
3)并且值为N的行占很小的比例
4)在此列上建立索引,由于很大的一部分索引空间是浪费的(等于Y的),不会使用到的,所以我们可以在值为’N’的那些行上面建立索引。
5)Create index I on T(decode(column1 , ‘N’, ‘N’))
6)利用的是B树索引特性,如果列值为null,在索引中就没有相应的条目。
4.使用Oracle函数索引来保证复杂的约束:(某个条件成立时,X,Y,Z必须唯一)
1)如果项目表,项目有2种状态,ACTIVE和INACTIVE
2)希望ACTIVE的项目必须有唯一的项目名,INACTIVE的项目没有此要求
3)此时项目状态这列上我们不适合建立唯一键
4)但是我们可以建立一个唯一索引
5)Create unique index I on T(decode(STATUS , ‘ACTIVE’ , NAME))
6)利用的还是B树索引特性,如果列值为null,在索引中就没有相应的条目。
二.Oracle函数索引索引的一些常见问题
1.B树索引特性,如果列值为null,在索引中就没有相应的条目。
1)Create table T (x int , y int)
2)Create unique index I T(x , y)
3)Insert into T values(1 , 1)
4)Insert into T values(null , 1)
5)Insert into T values(1 , null)
6)Insert into T values(null , null)
7)此时索引中只有三行,(null , null)不在索引行中
8)Insert into T values(null , null) --成功插入
9)Insert into T values(1 , null)--报错,违反index唯一性
10) 所以我们可以看到ORACLE中null <> null (null代表N/A)
11) Where x is null --这个查询无法使用索引,因为(null,null)不在索引中,如果ORACLE使用索引就会得到错误的答案
12) 同样能够得出结论,如果在一个允许null的列上面建立索引,x is null也不会使用索引
13) 可以使用索引的条件Create table T (x int , y int not null);
2.外键建立索引是需要的
3.索引跳跃式扫描
1)Create index I T(x , y)
2)Select * from T where x=5; --此时优化器可能不会使用索引
3)Select x , y from T where x=5;--可能使用索引,因为所需要的内容都在索引中
4)索引跳跃式扫描—skip scan
5)如果y只有2个基数,Y和N ,oracle会采用index
6)Select * from T where x=5; --会经过如下处理
7)Select * from T where x=5 and y=’Y’
Union all
Select * from T where x=5 and y=’N’;
4.如果索引建立在一个允许null的列上面, select * from T就会使用全表扫描,不使用索引,因为null的行并不在索引行中,所以不会使用index统计数目。
5.select * from T where x=5 等价于select * from T where to_number(x)=’5’,由于存在隐式转换,所以x上的索引不会得到使用
6.where trunc(date) = trunk(sysdate) 可以转换成 date >=trunc(sysdate) and date<trunk(sysdate+1)
7.定期分析表:如果发现Oracle 在有索引的情况下,没有使用索引,这并不是Oracle 的优化器出错。在有些情况下,Oracle 确实会选择全表扫描(Full Table Scan),而非索引扫描(Index Scan)。
8.有些情况下单列索引不如复合索引有效率!
相关推荐
这篇博文将深入探讨Oracle中索引的基本概念、类型、创建与管理,以及如何通过索引来优化查询性能。 首先,我们来理解什么是索引。索引就像是书的目录,当我们需要查找某个特定的信息时,通过目录可以直接定位到相应...
本篇文章将深入探讨Oracle中的B*Tree索引、反向索引、降序索引、位图索引和函数索引。 1. **B*Tree索引**: - B*Tree索引是Oracle中最常见的索引类型,其结构类似于二叉树,可以高效地处理高基数数据列,即具有...
本文将深入探讨Oracle索引的原理、创建方法,并结合SQL优化策略,帮助你提升数据库查询速度,降低资源消耗。 首先,我们要理解索引的基本概念。在数据库中,索引类似于书籍的目录,它为数据提供快速访问的途径。...
本篇文章将深入探讨Oracle索引的学习,重点关注索引的原理、类型、优缺点以及如何使用和分析执行计划。 首先,理解索引的基本概念。索引是一种特殊的数据结构,它存储在表空间中,用于加速对表数据的访问。当执行...
本文将深入探讨Oracle 10G中的一些关键函数,旨在帮助你更好地理解和利用这些工具。 1. **数学函数**: - `ABS()`: 返回一个数的绝对值。 - `MOD()`: 计算两个数相除的余数。 - `ROUND()`: 四舍五入到指定的小数...
本篇文章将深入探讨Oracle中的索引类型及其优化策略。 首先,索引是提升数据库查询速度的关键工具。在Oracle数据库中,常见的索引类型包括B*Tree索引、反向索引、降序索引、位图索引、函数索引以及interMedia全文...
本文将深入探讨Oracle性能优化、函数大全、数据库技术以及一些常见的"傻瓜问题"。 一、Oracle性能优化 1. SQL优化:性能优化的核心在于写出高效的SQL语句。这包括避免全表扫描,合理使用索引,减少数据冗余,以及...
本篇文章将深入探讨Oracle中的基本函数以及常用SQL查询,以帮助初学者快速入门,并为日常使用提供参考。 一、Oracle基本函数 1. **字符串函数**: - `CONCAT()`:连接两个或多个字符串。 - `SUBSTR()`:从字符串...
本文将深入探讨Oracle中的B树索引,包括它的概念、创建、删除和修改,以及如何理解其工作原理。 首先,索引是一种特殊的数据结构,它存储了表中某些列的值,使得数据的查找过程更高效。如同书籍的目录,索引提供了...
下面将对这些主题进行深入的探讨。 **一、Oracle函数大全** Oracle数据库提供了丰富的内置函数,用于处理各种数据类型和计算任务。以下是一些常见的函数类别: 1. **算术函数**:如`ADD_MONTHS()`用于增加月份,`...
5. **性能优化**:Oracle的性能调优是关键领域,可能包含索引优化、SQL查询优化、表分区、物化视图、数据库调优顾问(DBTA)的使用等。 6. **并发控制与事务管理**:Oracle使用多版本并发控制(MVCC)来实现事务的...
本篇文章将深入探讨Oracle数据库中的索引及其相关知识。 一、索引的概念与作用 索引是一种数据结构,它为数据库表中的数据提供快速访问路径。就像书籍的目录,索引可以帮助数据库系统迅速定位到所需的数据行,从而...
3. 表和索引管理:讨论如何在Oracle中创建、修改和删除表,以及索引的类型(B树、位图、函数索引等)和优化策略。还会涉及分区表和索引组织表的概念。 4. 存储管理:讲述Oracle的物理存储结构,包括数据块、段、区...
6. **安全性**:探讨Oracle的用户管理、权限控制和角色设置。讲解如何实施审计、数据加密和网络保护措施,以确保数据库的安全性。 7. **故障诊断与问题解决**:提供实用的故障排查技巧,包括日志分析、性能监控和...
本篇将深入探讨Oracle中的主要索引类型,以及它们的应用场景和优缺点。 一、B-Tree索引 B-Tree(二叉树)索引是最常见的索引类型,适用于等值查询。当用户执行WHERE子句中含有等于、不等于、大于、小于或在某个范围...
首先,让我们深入探讨Oracle中的日期函数。日期函数在数据库操作中扮演着核心角色,特别是在处理时间序列数据时。`SYSDATE`是Oracle中最常用的内置函数之一,它返回当前系统的日期和时间。例如,如果你在SQL查询中...
本篇文章将深入探讨Oracle数据库的优化策略,并提供一些常用的函数实例详解,帮助你更好地理解和应用这些技术。 首先,Oracle优化主要包括SQL优化、索引优化、存储优化和架构优化。SQL优化是最基础的,通过编写高效...
这篇博客文章将深入探讨Oracle索引的基本概念、类型以及如何优化其使用。 首先,我们需要理解索引是如何创建和存储的。在Oracle中,最常见的索引类型是B树索引(B-Tree Index),它按照键值的顺序组织数据。当一个...
本文将深入探讨"Oracle常用函数"以及"SQL*Plus基本命令"这两个关键领域,旨在帮助你提升在数据库操作中的效率。 一、Oracle常用函数 1. 长度函数`LENGTH` `LENGTH`函数用于计算字符串的字符数,不区分字符类型(如...
本文将深入探讨Oracle数据库系统的关键知识点,包括其功能、对照表以及常用的查询函数。 首先,Oracle数据库系统提供了强大的数据管理能力,支持事务处理、数据仓库、网格计算等多种应用场景。它采用了SQL(结构化...