最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Oracle復(fù)合索引與空值的索引使用問題小結(jié)

 更新時間:2018年02月07日 16:07:10   作者:Leohahah  
最近小編在群里討論sql優(yōu)化的問題,今天小編給大家?guī)砹薕racle復(fù)合索引與空值的索引使用問題小結(jié),需要的朋友參考下吧

昨天在QQ群里討論一個SQL優(yōu)化的問題,語句大致如下:

select A,min(B) from table group by A;--A,B都沒有not null約束,A列無空值,B列有空值。--存在復(fù)合索引IX_TEST(A,B)

于是手動測試,環(huán)境采用Oracle自帶的scott用戶下的emp表。

1.首先查看如下語句的執(zhí)行計劃(此時表只有主鍵索引):

2.添加IX_TEST(deptno,comm)后查看執(zhí)行計劃:

發(fā)現(xiàn)依然是全表掃描。

3.為deptno列添加非空約束后再次查看執(zhí)行計劃:

4.總結(jié):

Btree索引是不存儲空值的,這個是所有使用Btree索引的數(shù)據(jù)庫的共同點。

在本例中我們創(chuàng)建了deptno,comm的符合索引。如果deptno沒有非空約束,那么說明有的record不會出現(xiàn)在索引中,此時想要找到min(comm)就必須回表才能確定deptno為null的行是否有comm的值。此時優(yōu)化器認(rèn)為全表掃描比掃描索引再回表更為合理,因此選擇全表掃描。

當(dāng)我們添加了非空約束后,deptno不可能為空,因此索引的key值數(shù)等于表總行數(shù),另一列comm即便為空也不影響min()取值,只需要掃描索引即可得到所需結(jié)果,此時優(yōu)化器選擇索引掃描。

而在Mysql中無論復(fù)合索引首列是否存在非空約束,都會使用索引,deptno為null的會全部分在一組取min(comm),可能是Mysql的BTREE索引與Oracle的有所不同,使得首列為空都可以無需回表。

最后:Oracle的列能添加非空約束的一定要添加。

總結(jié)

以上所述是小編給大家介紹的Oracle復(fù)合索引與空值的索引使用問題小結(jié),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

最新評論

邢台市| 包头市| 云梦县| 新竹县| 尖扎县| 固原市| 鄯善县| 巫山县| 巫溪县| 芦溪县| 宜春市| 郎溪县| 东宁县| 汾阳市| 仲巴县| 十堰市| 库伦旗| 云南省| 柞水县| 大英县| 高淳县| 海门市| 视频| 西充县| 西乌珠穆沁旗| 双桥区| 田东县| 颍上县| 石棉县| 勃利县| 平昌县| 阿城市| 绥阳县| 凤城市| 尼木县| 新丰县| 多伦县| 通江县| 红桥区| 镇平县| 屏东市|