索引的用法
来源:互联网 发布:遗传算法c 实现 编辑:程序博客网 时间:2024/06/01 10:03
>避免在索引列上使用计算和函数.
WHERE子句中,如果索引列是函数的一部分.优化器将不使用索引而使用全表扫描.
WHERE子句中,如果索引列是函数的一部分.优化器将不使用索引而使用全表扫描.
举例:
低效:
SELECT …
FROM DEPT
WHERE SAL * 12 > 25000;
SELECT …
FROM DEPT
WHERE SAL * 12 > 25000;
高效:
SELECT …
FROM DEPT
WHERE SAL > 25000/12;
SELECT …
FROM DEPT
WHERE SAL > 25000/12;
这是一个非常实用的规则,请务必牢记
[注意:] 如果必须使用的话,可以创建基于函数的索引.
>避免在索引列上使用NOT
通常, 我们要避免在索引列上使用NOT, NOT会产生在和在索引列上使用函数相同的
通常, 我们要避免在索引列上使用NOT, NOT会产生在和在索引列上使用函数相同的
>避免在索引列上使用IS NULL和IS NOT NULL
避免在索引中使用任何可以为空的列,ORACLE将无法使用该索引 .
避免在索引中使用任何可以为空的列,ORACLE将无法使用该索引 .
>总是使用索引的第一个列 (前导列)
如果索引是建立在多个列上, 只有在它的第一个列(leading column)被where子句引用时,优化器才会选择使用该索引.
如果索引是建立在多个列上, 只有在它的第一个列(leading column)被where子句引用时,优化器才会选择使用该索引.
这也是一条简单而重要的规则. 见以下实例.
>避免改变索引列的类型.
当比较不同数据类型的数据时, ORACLE自动对列进行简单的类型转换.
假设 EMPNO是一个数值类型的索引列.
SELECT …
FROM EMP
WHERE EMPNO = ‘123’
实际上,经过ORACLE类型转换, 语句转化为:
SELECT …
FROM EMP
WHERE EMPNO = TO_NUMBER(‘123’)
幸运的是,类型转换没有发生在索引列上,索引的用途没有被改变.
现在,假设EMP_TYPE是一个字符类型的索引列.
SELECT …
FROM EMP
WHERE EMP_TYPE = 123
这个语句被ORACLE转换为:
SELECT …
FROM EMP
WHERE TO_NUMBER(EMP_TYPE)=123
因为内部发生的类型转换, 这个索引将不会被用到!
为了避免ORACLE对你的SQL进行隐式的类型转换, 最好把类型转换用显式表现出来. 注意当字符和数值比较时, ORACLE会优先转换数值类型到字符类型.
>需要当心的WHERE子句
某些SELECT 语句中的WHERE子句不使用索引. 这里有一些例子.
在下面的例子里, ‘!=’ 将不使用索引. 记住, 索引只能告诉你什么存在于表中, 而不能告诉你什么不存在于表中.
[总之:]对索引列的使用最好就是 where 索引列 = 条件
!=将不使用索引,记住, 索引只能告诉你什么存在于表中, 而不能告诉你什么不存在于表中.
>分离表和索引
总是将你的表和索引建立在不同的表空间内(TABLESPACES). 决不要将不属于ORACLE内部系统的对象存放到SYSTEM表空间里. 同时,确保数据表空间和索引表空间置于不同的硬盘上.
某些SELECT 语句中的WHERE子句不使用索引. 这里有一些例子.
在下面的例子里, ‘!=’ 将不使用索引. 记住, 索引只能告诉你什么存在于表中, 而不能告诉你什么不存在于表中.
[总之:]对索引列的使用最好就是 where 索引列 = 条件
!=将不使用索引,记住, 索引只能告诉你什么存在于表中, 而不能告诉你什么不存在于表中.
>分离表和索引
总是将你的表和索引建立在不同的表空间内(TABLESPACES). 决不要将不属于ORACLE内部系统的对象存放到SYSTEM表空间里. 同时,确保数据表空间和索引表空间置于不同的硬盘上.
译者按:
“同时,确保数据表空间和索引表空间置与不同的硬盘上.”可能改为如下更为准确 “同时,确保数据表空间和索引表空间置与不同的硬盘控制卡控制的硬盘上.”
“同时,确保数据表空间和索引表空间置与不同的硬盘上.”可能改为如下更为准确 “同时,确保数据表空间和索引表空间置与不同的硬盘控制卡控制的硬盘上.”
- SQL 索引的用法
- 全文索引的用法
- Oracle 索引的用法
- 索引的用法
- mysql 索引 key 的用法
- MongoDB中索引的用法
- Oracle强制索引的用法
- mysql 索引 key 的用法
- 【索引函数】的一种用法
- Mysql 索引的简单用法
- mongo 各种索引的用法
- PostgreSql的索引用法小结二--唯一性索引
- MySQL:索引工作原理及索引的用法
- Lucene.net索引的用法、系列、文档
- SQL Server全文索引的用法
- PostgreSql的索引用法小结一
- sql索引的定义以及用法总结
- C#索引器的详细用法
- OpenCV中OpenCL模块函数
- Union All/Union/Intersect操作
- 线索二叉树
- ASO技巧详解(3):截图等因素对ASO的影响
- linux内核移植-移植2.6.35.4内核到s3c2440
- 索引的用法
- 马尔科夫随机场(Markov Random Field)的概念与应用(一)
- 浅谈网站采集与SEO的秘密所在
- C++标准程序库笔记---迭代器
- Java总结(20) 代理
- C++STLSet学习
- Debian Linux使用
- yuv 格式之 Semi Planar和Planar
- POJ 1637 混合图求欧拉回路 最大流实现