参考https://blog.csdn.net/badly9/article/details/21286605
适用场景:通过where 列名 is null来查找一些数据
例如:
select count(*) from test_objects where object_id is null;
因为B-Tree索引不会记录null所以只能使用全表扫描。产生了大量的consistent gets
下面我们来建立含常数的复合索引,并查询执行:
create index idx_oid2_test_objects on test_objects(object_id,1);
我们可以看到组合索引首列为object_id,也就是条件列,第二列是常量1
这时候对于刚才的查询select count(*) from test_objects where object_id is null;来说是可以使用索引的
查看执行计划发现 |* 2 | INDEX RANGE SCAN| IDX_OID2_TEST_OBJECTS | 1 | 5 | 2 (0)|
00:00:01 |
Statistics
1 recursive calls
0 db block gets
3 consistent gets
2 physical reads
0 redo size
410 bytes sent via SQL*Net to client
385 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
————————————————
可以看到此时拥有含场数的复合索引之后就能够使用该索引查找null,极大的提升了执行效率。consistent gets从74808降到了3.效果非常明显。
版权声明:本文为CSDN博主「badly9」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/badly9/article/details/21286605
网友评论