亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

order by 使用索引的情況

系統(tǒng) 2374 0
order by使用索引 要保證那個(gè)列設(shè)置為非空

以下只在oracle10g中測(cè)試:

order by 使用索引是有條件的(只包括在有選擇的此列上,不一定適應(yīng)*的情況):

1)ORDER BY中所有的列必須包含在相同的索引中并保持在索引中的排列順序.
2)ORDER BY中所有的列必須定義為非空.

請(qǐng)看下面的測(cè)試:

id為PK,a上有一般索引,b列沒有索引

執(zhí)行下面兩條語句,結(jié)果是先order by ,再執(zhí)行rownum<20

(1)select * from tb where rownum<20 order by id;

但如果是這樣:

(2)select * from tb where rownum<20 order by b;

(3) select * from tb where rownum<20 order by a;

結(jié)果是先執(zhí)行rownum<7,再order by

這是為什么呢,跟主健及其上面的索引有關(guān)系:

再看看下面的測(cè)試:----------------------------------------------------------------------------------------------------------

ID是主健.

SQL> select * from t;

??????? ID??????? ID1
---------- ----------
???????? 1????????? 2
???????? 2????????? 4
???????? 4????????? 3


Execution Plan
----------------------------------------------------------
?? 0????? SELECT STATEMENT Optimizer=CHOOSE
?? 1??? 0?? TABLE ACCESS (FULL) OF 'T'

SQL> select * from t where rownum<3 order by id desc;

??????? ID??????? ID1
---------- ----------
???????? 4????????? 3
???????? 2????????? 4


Execution Plan
----------------------------------------------------------
?? 0????? SELECT STATEMENT Optimizer=CHOOSE
?? 1??? 0?? COUNT (STOPKEY)
?? 2??? 1???? TABLE ACCESS (BY INDEX ROWID) OF 'T'
?? 3??? 2?????? INDEX (FULL SCAN DESCENDING) OF 'PK' (UNIQUE)
'因?yàn)槭侵鹘。冗M(jìn)行索引的排序全表掃描,然后在count 2'

SQL> select * from t where rownum<3 order by id1;

??????? ID??????? ID1
---------- ----------
???????? 1????????? 2
???????? 2????????? 4


Execution Plan
----------------------------------------------------------
?? 0????? SELECT STATEMENT Optimizer=CHOOSE
?? 1??? 0?? SORT (ORDER BY)
?? 2??? 1???? COUNT (STOPKEY)
?? 3??? 2?????? TABLE ACCESS (FULL) OF 'T'
'沒有使用索引,先進(jìn)行全表掃描,然后再count 2,再排序'

為什么會(huì)使用pk的索引呢?一般的索引行嗎?
我們看看:

1)在id1上創(chuàng)建索引


SQL> create index id1idx on t(id1);

索引已創(chuàng)建。
SQL> select * from t where rownum<3 order by id1;

??????? ID??????? ID1
---------- ----------
???????? 1????????? 2
???????? 2????????? 4


Execution Plan
----------------------------------------------------------
?? 0????? SELECT STATEMENT Optimizer=CHOOSE
?? 1??? 0?? SORT (ORDER BY)
?? 2??? 1???? COUNT (STOPKEY)
?? 3??? 2?????? TABLE ACCESS (FULL) OF 'T' '還是全表掃描'

SQL> select * from t where id1>0 and rownum<3 order by id1;
'加了id1>0 ,這樣會(huì)使用到id1的索引'

??????? ID??????? ID1
---------- ----------
???????? 1????????? 2
???????? 4????????? 3


Execution Plan
----------------------------------------------------------
?? 0????? SELECT STATEMENT Optimizer=CHOOSE
?? 1??? 0?? COUNT (STOPKEY)
?? 2??? 1???? TABLE ACCESS (BY INDEX ROWID) OF 'T'
?? 3??? 2?????? INDEX (RANGE SCAN) OF 'ID1IDX' (NON-UNIQUE)


2)pk的索引是因?yàn)橛衞rder by 而使用的。order by 使用索引是有條件的:
ORDER BY中所有的列必須包含在相同的索引中并保持在索引中的排列順序.
ORDER BY中所有的列必須定義為非空.

因?yàn)閕d1是可以為空的,所以order by 不會(huì)使用它。而pk的索引是非空的,所以order by 會(huì)使用。

我們將id1設(shè)為非空看看。


SQL> alter table t
2 modify (id1 int not null);

表已更改。

SQL> select * from t where rownum<3 order by id1;

??????? ID??????? ID1
---------- ----------
???????? 1????????? 2
???????? 4????????? 3


Execution Plan
----------------------------------------------------------
?? 0????? SELECT STATEMENT Optimizer=CHOOSE
?? 1??? 0?? COUNT (STOPKEY)
?? 2??? 1???? TABLE ACCESS (BY INDEX ROWID) OF 'T'
?? 3??? 2?????? INDEX (FULL SCAN) OF 'ID1IDX' (NON-UNIQUE)
'這次,order by id1 使用了id1上的索引!'

說明 如果該表上尚未創(chuàng)建聚集索引,且在創(chuàng)建 PRIMARY KEY 約束時(shí)未指定非聚集索引,PRIMARY KEY 約束會(huì)自動(dòng)創(chuàng)建聚集索引。

order by 使用索引的情況


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 99福利网 | 日本一级淫片a的一级欧美 日本一级淫片a免费播放 | 九九精品免费观看在线 | 久久久麻豆 | 久久精品亚洲乱码伦伦中文 | 久久久99精品免费观看精品 | 99精品在线观看视频 | 九九免费观看全部免费视频 | 欧美一级h | 日韩经典欧美一区二区三区 | 亚洲毛片在线免费观看 | 免费午夜在线视频 | 男女羞羞视频免费观看 | 久久久亚洲欧洲国产 | 国产精品久久自在自线观看 | 免费看色| 亚洲精品乱码久久久久久v 亚洲精品乱码久久久久久麻豆 | 老司机永久免费网站在线观看 | 国产日韩精品欧美一区色 | 在线欧美不卡 | 国产精品亚洲精品一区二区三区 | 国产在线观看精品 | 极品俄罗斯性孕妇孕交 | 一本伊大人香蕉久久网手机 | 99久久久国产精品免费播放器 | 亚洲第一永久色 | 偷偷狠狠的日日2020 | 日韩精品福利视频一区二区三区 | 九九热这里 | 久久一区二区三区精品 | 日韩一级欧美一级一级国产 | caoporm超免费公开视频 | 欧美亚洲另类久久综合 | 四虎视频网站 | 免费人成在线观看69式小视频 | 久草青草| 色老板女色狠xx网 | 日韩 欧美 亚洲国产 | 日本不卡免费在线 | 在线观看91精品国产不卡免费 | 久久免费视频7 |