a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 數(shù)據(jù)庫 > Oracle > 正文

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

2024-08-29 14:00:59
字體:
供稿:網(wǎng)友

昨天在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í)行計(jì)劃(此時表只有主鍵索引):

oracle,索引,空值,oracle復(fù)合索引

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

oracle,索引,空值,oracle復(fù)合索引

oracle,索引,空值,oracle復(fù)合索引

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

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

oracle,索引,空值,oracle復(fù)合索引

oracle,索引,空值,oracle復(fù)合索引

4.總結(jié):

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

在本例中我們創(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ù)大家的。在此也非常感謝大家對VeVb武林網(wǎng)網(wǎng)站的支持!


注:相關(guān)教程知識閱讀請移步到oracle教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 一区二区三区的视频 | 日本爽快片毛片 | 国产精品视频免费观看 | 国产视频久久久久久 | 亚洲精品一区二区三区蜜桃久 | 国产精品日韩欧美 | 日韩国产在线 | 欧美视频免费在线 | 国产亚洲一区二区三区在线观看 | 欧美午夜精品久久久 | 亚洲精品视频免费看 | 久久久久久久久99精品 | 欧美一级全黄 | 国产精品久久久久久久久久久久冷 | 欧美精品片 | 国产精品中文字母 | 久热精品国产 | 久久99精品国产99久久6男男 | 亚洲精品视频在线观看免费 | 97久久久国产精品 | 日韩av一区二区三区在线观看 | 日本免费不卡 | 国产成人精品一区二 | 日韩精品一区二区三区在线观看 | 国产一区二区三区久久久久久久 | 看真人视频a级毛片 | 色综合中文| 婷婷激情综合 | 欧美 日韩 国产 一区 | av在线一区二区 | 久久99久久98精品免观看软件 | 中文字幕视频在线播放 | 精国产品一区二区三区 | www.日韩大片 | 免费a在线看 | 欧美一区二区三区四区五区 | 91精品久久久久久久久久 | 久久精品首页 | 国产www在线| 国产视频一区在线观看 | 在线免费国产 |