Oracle中组合索引的使用
一、什么是索引?
数据库索引类似一本书的目录,目录中将书的内容先分为第一层(第一章、第二章……第N章的标题和对应页码),第二层(1.1XXX,1.2XXX……N.nXXX)具体某个小章节的标题和对应页码。读者可以根据目录快速查找到自己想看的内容,不用一页一页翻阅书本查找。Oracle主要是使用了与二叉平衡树类似的B数的来存储索引数据,在之前写的那篇红黑树博客中介绍过什么是二叉平衡树。
二、组合索引
假设现在Oracle数据库中的test表有a,b,c,d四个字段,现在给test2表加上(a,b,c)这个组合索引。我们可以通过oralce的执行计划来查看执行的查询语句是否使用了索引。首先创建(A,B,C组合索引)
以PL/SQL软件为例,按F5查看SQL语句的执行计划。
(1)select * from test2 where a ='XXX'这时查询就会走索引(INDEX RANGE SCAN)。
(2)select * from test2 where a ='XXX' and c='XXX' 这时查询就也会走索引(INDEX RANGE SCAN)。
(3)select * from test2 where b ='XXX' and c='XXX' 这时查询就走全表扫描(TABLE ACCESS FULL)。
(4)如果查询条件是 c ='XXX' and a='XXX' 或者 b ='XXX' and a='XXX',数据库会自动将条件优化为以a='XXX'开头。
通过上面的几个查询列子,我们可以了解到了Oracle索引的最左匹配原则。
举个例子:
我们到达某个房间时必须依次打开A、B、C三扇门。假如我们想打开B门或者C门,就必须先打开A门,而不能直接打开B门或C门。
索引的最左匹配原则也与此类似,如果想让B,C字段的索引生效,那么需要先在where条件中使用B字段,如果直接使用B或C字段是无法走索引扫描的。