oracle不使用索引快速全扫描或索引全扫描的原因
来源:互联网 发布:柠檬网络电视台 编辑:程序博客网 时间:2024/06/10 10:46
查找了一个有索引(单列索引)的列的所有数据,结果不使用索引快速全扫描或索引全扫描,而使用全表扫描。这是什么原因呢?
这是因为该列定义的时候,允许为空。而null值是不会存到B-tree索引里啊,那肯定不走索引了。
null值可以存储到bitmap索引里面。
查找的时候,加个is not null条件,那就走索引了。故is null不会走索引的。
对于组合索引来说,如果其中某一列(不必须是引导列)不允许为null,其他列允许为null,那么,允许为null的列如果有null值的记录,那么这条记录也会存进btree索引。
那么,查找允许为null的列的所有数据,也会使用索引全扫描。因为查的是那个索引的列。
对于组合索引,只是引导列进行排序吗?其他列会不会进行排序?
last_name不为空,first_name允许为空
create index EMP_NAME_IX on EMPLOYEES (LAST_NAME, FIRST_NAME);
SELECT e.first_name,e.last_name from hr.employees e;
结果:
FIRST_NAME LAST_NAME
Ellen Abel
Sundar Ande
Mozhe Atkinson
David Austin
Hermann Baer
Shelli Baida
Amit Banda
Elizabeth Bates
Sarah Bell
David Bernstein
Laura Bissot
select t.first_name from hr.employees t;
结果:
Ellen
Sundar
Mozhe
David
Hermann
Shelli
Amit
Elizabeth
Sarah
David
Laura
Harrison
Alexis
结果是以last_name排序后,last_name对应的first_name查询出来的。
如果last_name允许为空,first_name不允许为空
则引导列的null值排在最后。其他还是以引导列排序。
这个同 order by last_name,first_name按照什么排序是一样的。
- oracle不使用索引快速全扫描或索引全扫描的原因
- 索引全扫描与索引快速扫描的区别
- 使用索引快速全扫描(Index FFS)避免全表扫描的若干场景
- 【索引】索引全扫描和索引快速全扫描的区别
- oracle 全扫描和索引扫描
- 使用Oracle9i全索引扫描快速访问数据
- 使用Oracle9i全索引扫描快速访问数据
- Oracle优化——LIKE与索引(以%开头的LIKE会不走索引或走索引全扫描)
- oracle 索引 避免全表扫描
- Oracle 索引 避免全表扫描
- 什么时候全表扫描比使用索引扫描能更快?
- 【索引】索引五种扫描方式至索引快速全扫描
- 全表扫描 vs 索引
- 3.2.5 索引全扫描
- 获得全索引扫描对象
- 【索引】索引五种扫描方式至索引全扫描
- 全表扫描和索引扫描的区别
- 全表扫描和索引扫描的区别
- 【SpamHunter】GCC相关速查手册——整理自网络
- elua中的SconsStruct文件
- 堆和栈的区别
- U-Boot完美解读(4)——主循环
- 互联网就是大脑,互联网的7种神经反射弧
- oracle不使用索引快速全扫描或索引全扫描的原因
- Linux中权限对文件与目录的意义何在
- 新老生交流感想
- web 服务器 Boa 移植
- c call java的实现方式
- 别人拿不走的才是你最有价值的
- struts的s标签
- 怎么设计好类?
- Keep ON Learning