rownum和order by以及index的关系
2008-09-01 12:46:07 来源:WEB开发网给DAIMIN表中的PARENTID字段建索引
createindexDM_PARENTIDonDAIMIN(PARENTID);
selectrownumasr,t.parentidfromdaimintorderbyt.parentid;
其执行计划:
--------------------------------------------------------------------
|Id|Operation|Name|Rows|Bytes|Cost|
--------------------------------------------------------------------
|0|SELECTSTATEMENT|||||
|1|SORTORDERBY|||||
|2|COUNT|||||
|3|TABLEACCESSFULL|DAIMIN||||
--------------------------------------------------------------------
查询结果:
SQL>selectrownumasr,t.parentidfromdaimintorderbyt.parentid;
RPARENTID
--------------------
31
42
23
16
分析:给parentid字段建了索引,但是该语句并没有使用索引,仍然采用的是全表扫描,所以返回的rownum仍然不是正序。
如果修改DAIMIN表中的PARENTID字段为not null
alter table DAIMIN modify PARENTID not null;
再次查询该语句的其执行计划:
---------------------------------------------------------------------
|Id|Operation|Name|Rows|Bytes|Cost|
---------------------------------------------------------------------
|0|SELECTSTATEMENT|||||
|1|COUNT|||||
|2|INDEXFULLSCAN|DM_PARENTID||||
---------------------------------------------------------------------
赞助商链接