欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)文章

  • Oracle如何給數(shù)據(jù)庫添加約束過程解析

    Oracle如何給數(shù)據(jù)庫添加約束過程解析

    這篇文章主要介紹了Oracle如何給數(shù)據(jù)庫添加約束過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • oracle iSQL*PLUS配置設(shè)置圖文說明

    oracle iSQL*PLUS配置設(shè)置圖文說明

    iSQL*PLUS是從ORACLE 9i開始提供的新功能,是SQL*PLUS的Web形式(ORACLE 11g已經(jīng)不支持)是基于三層結(jié)構(gòu)設(shè)計的,需要的朋友可以了解下
    2012-12-12
  • 如何使用Oracle PL/SQL 實現(xiàn)發(fā)送電子郵件功能(UTL_MAIL)

    如何使用Oracle PL/SQL 實現(xiàn)發(fā)送電子郵件功能(UTL_MAIL)

    這篇文章主要介紹了Oracle PL/SQL 實現(xiàn)發(fā)送電子郵件功能,今天主要給大家介紹使用UTL_MAIL實現(xiàn)發(fā)送電子郵件功能,具體實例代碼跟隨小編一起看看吧
    2021-08-08
  • Linux中Oracle啟動偵聽報錯TNS:permission denied的解決方法

    Linux中Oracle啟動偵聽報錯TNS:permission denied的解決方法

    這篇文章主要介紹了Linux中Oracle啟動偵聽時報錯TNS:permission denied的解決方法,文中給出了詳細的解決方法,相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-02-02
  • 解決ORA-01747:user.table.column,table.column或列說明無效

    解決ORA-01747:user.table.column,table.column或列說明無效

    這篇文章主要介紹了解決ORA-01747:user.table.column,table.column或列說明無效的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Oracle中SQL語句連接字符串的符號使用介紹

    Oracle中SQL語句連接字符串的符號使用介紹

    Oracle中SQL語句連接字符串的符號為|| ,感興趣的朋友可以參考下下文的使用方法,感興趣的朋友可以參考下哈
    2013-04-04
  • ORACLE 10g 安裝教程[圖文]

    ORACLE 10g 安裝教程[圖文]

    剛剛接觸ORACLE的人來說,從那里學(xué),如何學(xué),有那些工具可以使用,應(yīng)該執(zhí)行什么操作,一定回感到無助。所以在學(xué)習(xí)使用ORACLE之前,首先來安裝一下ORACLE 10g,在來掌握其基本工具。俗話說的好:工欲善其事,必先利其器。我們開始吧!
    2009-05-05
  • oracle中的trim函數(shù)使用介紹

    oracle中的trim函數(shù)使用介紹

    trim一般都是用在刪除字符串兩邊的空格。實際上,trim也可以用來刪除字符串兩邊的指定字符。并且trim指定刪除的字符串只能是單個字符
    2014-08-08
  • Centos下Oracle11gR2安裝教程與自動化配置腳本的方法

    Centos下Oracle11gR2安裝教程與自動化配置腳本的方法

    這篇文章主要介紹了Centos下Oracle11gR2安裝教程與自動化配置腳本的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • oracle Dbeaver存儲過程語法詳解

    oracle Dbeaver存儲過程語法詳解

    這篇文章主要介紹了oracle Dbeaver存儲過程語法詳解,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-10-10

最新評論