rownum和order by以及index的关系
2008-09-01 12:46:07 来源:WEB开发网(Rownum事实上在COUNT (STOPKEY)时产生)
SQL>selectrownumasr,t.parentidfromdaimintorderbyt.parentid;
RPARENTID
--------------------
31
42
23
16
现象:是rownum没有按照正序来返回
该语句的执行计划如下:
--------------------------------------------------------------------
|Id|Operation|Name|Rows|Bytes|Cost|
--------------------------------------------------------------------
|0|SELECTSTATEMENT|||||
|1|SORTORDERBY|||||
|2|COUNT|||||
|3|TABLEACCESSFULL|DAIMIN||||
--------------------------------------------------------------------
现象:没有使用索引查询 ,并且在COUNT操作之后有SORT ORDER BY操作
分析:为什么这两句SQL语句返回的rownum不一样呢?
主要是由于第一句使用了索引已经排好序,然后再产生Rownum,此时已经是按照parentid排好序的顺序,
再按照parentid排序之后原来的rownum标识不会被打乱,所以返回的rownum是正序;
而第二句则使用全表扫描,在全表扫面是查询出来的结果集是按照表中原有的记录的先后顺序来返回的,
然后在COUNT操作时给返回的记录标记1,2,3,在标好标记之后再按照parentid字段排序,这样就将原来
在COUNT时的顺序打乱,重新排序,所以返回的rownum不是正序。
问题3、rownnum与索引之间的关系?是不是建了某个字段的索引都会使用索引呢(在没有改字段的where条件的情况下)?
下面做测试试验:
赞助商链接