甲骨文在组合索引上,只使用部分列进行查询(查询时必须包含前导列,否则会走全表扫描)

  

实验环境:Oracle数据库11 g企业版发布11.2.0.4.0——64位生产

1,创建表插入数据

完成,create  table  txtx (id  int, name  char (2), tx  char (3), id1  int, primary 关键(id、名称、tx));   表已创建。   完成,insert  into  txtx 价值(1,tx, tx, 1);   已创建,1行。   完成,insert  into  txtx 价值(2,tx, tx, 2);   已创建,1行。   完成,insert  into  txtx 价值(3“tx”“tx”, 3);   已创建,1行。   之前完成,提交;   完成,select  *,得到txtx;   ,,,,,,,ID  NA  TX ,,,,,,, ID1   - - - - - - - -,-,-安康;- - - - - - - - - - -   ,,,,,,,,1,tx  tx ,,,,,,,,,, 1   ,,,,,,,,2,tx  tx ,,,,,,,,,, 2   ,,,,,,,,3,tx  tx ,,,,,,,,,, 3

2,执行计划

完成,explain  plan  for  select  *,得到txtx , where  id=1,以及id1 =1,以及tx=皌x”;   已解释。   完成set  linesize  200   完成,select  *,得到表(DBMS_XPLAN.DISPLAY);   PLAN_TABLE_OUTPUT   --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------   Plan  hash 值:4191381592   --------------------------------------------------------------------------   | |,Id 还以为;Operation ,,,,,,,, |, Name  |, Rows , |, Bytes  |, Cost  (% CPU) |, Time ,,, |   --------------------------------------------------------------------------   |,,,0,|,SELECT  STATEMENT , |,,,,,, |,,,,, 1, |,,,, 35, |,,,,, 3,,, (0) |, 00:00:01  |   | *,,1,|,,TABLE  ACCESS 全部|,TXTX  |,,,,, 1, |,,,, 35, |,,,,, 3,,, (0) |, 00:00:01  |   --------------------------------------------------------------------------   Predicate 方式;(identified  by  operation  id):   ---------------------------------------------------   PLAN_TABLE_OUTPUT   --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------   ,,1,安康;过滤器(“ID”=1,以及“ID1”=1,以及“TX”=癟X”)   请注意   -----   ,,今天早上,dynamic  sampling  used  for 却;能够statement (要求等级=2)   已选择17行。

通过以上执行计划,可以看的出,不含前导列,进行了全表扫描,以下使用了前导列,查询速度就上来了

完成,explain  plan  for  select  *,得到txtx , where  id=1,以及name =皌x”,以及tx=皌x”;   已解释。   完成,select  *,得到表(DBMS_XPLAN.DISPLAY);   PLAN_TABLE_OUTPUT   --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------   Plan  hash 值:913771524   --------------------------------------------------------------------------------------------   | |,Id 还以为;Operation ,,,,,,,,,,,,,,,,,, |, Name ,,,,,,,, |, Rows , |, Bytes  |, Cost  (% CPU) |, Time ,,, |   --------------------------------------------------------------------------------------------   |,,,0,|,SELECT  STATEMENT ,,,,,,,,,,, |,,,,,,,,,,,,,, |,,,,, 1, |,,,, 35, |,,,,, 1,,, (0) |, 00:00:01  |   null   null   null   null   null   null   null   null   null

甲骨文在组合索引上,只使用部分列进行查询(查询时必须包含前导列,否则会走全表扫描)