精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

MySQL中,IS NULL和IS NOT NULL不會走索引?錯!

數(shù)據(jù)庫 MySQL
在MySQL中,查詢條件使用??IS NULL??或 ??IS NOT NULL??,理論上都會走索引。部分不走索引的情況也是因為優(yōu)化器判斷全表掃描的效率要高于使用索引,才導(dǎo)致放棄使用索引,而這與查詢條件為??IS NULL??或 ??IS NOT NULL??本身沒有直接關(guān)系,只和執(zhí)行成本有關(guān)。

最近寫了一系列關(guān)于MySQL索引相關(guān)的文章,幫大家系統(tǒng)全面地把索引這塊的知識豐富串聯(lián)起來,需要回顧或?qū)W習(xí)這方面的知識的朋友可以看看前面的文章。

今天這篇文章給大家分析和示例一下,MySQL中,當查詢條件為IS NULL或 IS NOT NULL時,哪些情況會走索引,哪些情況下又不會走索引。最終結(jié)論可能與大家的直覺有所不同。

下面我們直接通過具體的實例來看看當查詢條件為IS NULL或 IS NOT NULL時,索引的使用情況。

實例一:少量數(shù)據(jù),使用索引

這里采用的MySQL數(shù)據(jù)庫版本為8.0.18,后續(xù)實例均采用此版本。

創(chuàng)建一個test表,創(chuàng)建語句如下:

CREATE TABLEtest (
    idINT PRIMARY KEY,
    col1 INT,
    col2 INT,
    INDEX idx_col1 (col1)
);

-- 添加兩條數(shù)據(jù)
insertintotestvalues(1,null,1);
insertintotestvalues(2,null,2);

其中在col1列上創(chuàng)建了索引。

實例演示

此時,我們來看IS NULL和 IS NOT NULL是否走索引。

mysql> explain SELECT * FROMtestWHERE col1 ISNULL \G
*************************** 1.row ***************************
           id: 1
  select_type: SIMPLE
        table: test
   partitions: NULL
         type: ref
possible_keys: idx_col1
          key: idx_col1
      key_len: 5
          ref: const
         rows: 1
     filtered: 100.00
        Extra: Usingindex condition

通過上面的EXPLAIN語句,我們可以看到,當查詢條件為IS NULL,且對應(yīng)查詢條件字段上有索引時,MySQL使用索引來處理IS NULL查詢條件。

再來看IS NOT NULL查詢條件:

mysql> explain SELECT * FROMtestWHERE col1 ISNOTNULL \G
*************************** 1.row ***************************
           id: 1
  select_type: SIMPLE
        table: test
   partitions: NULL
         type: range
possible_keys: idx_col1
          key: idx_col1
      key_len: 5
          ref: NULL
         rows: 1
     filtered: 100.00
        Extra: Usingindex condition

當查詢條件為IS NOT NULL時,同樣使用了索引。

在上面的示例中,我們可以看到無論是IS NULL或 IS NOT NULL都使用索引。

實例二:大量數(shù)據(jù),少量NULL值

該實例依舊采用上述表結(jié)構(gòu),初始化3萬數(shù)據(jù),其中col1中的NULL值約占5%。

mysql> select count(*) from test;
+----------+
| count(*) |
+----------+
|    30000 |
+----------+

在上述情況下,我們再來看看兩個查詢語句的索引使用情況。

IS NULL查詢條件:

mysql> explain SELECT * FROMtestWHERE col1 ISNULL \G
*************************** 1.row ***************************
           id: 1
  select_type: SIMPLE
        table: test
   partitions: NULL
         type: ref
possible_keys: idx_col1
          key: idx_col1
      key_len: 5
          ref: const
         rows: 1551
     filtered: 100.00
        Extra: Usingindex condition

可以看到,IS NULL查詢條件使用了索引。

IS NOT NULL查詢條件:

mysql> explain SELECT * FROMtestWHERE col1 ISNOTNULL \G
*************************** 1.row ***************************
           id: 1
  select_type: SIMPLE
        table: test
   partitions: NULL
         type: ALL
possible_keys: idx_col1
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 30570
     filtered: 50.00
        Extra: Usingwhere

此時,IS NOT NULL查詢條件在執(zhí)行的過程中并沒有使用索引,而是采用了全表掃描。

這是因為,當表中的大部分數(shù)據(jù)都滿足 col1 IS NOT NULL 的條件(例如超過一半以上的記錄符合條件,本實例中為95%),MySQL 的查詢優(yōu)化器可能會認為使用索引的代價高于全表掃描的代價,從而選擇全表掃描。

實例三:大量數(shù)據(jù),大量NULL值

該實例依舊采用上述表結(jié)構(gòu),初始化3萬數(shù)據(jù),其中col1中的NULL值約占95%。

在上述情況下,我們再來看看兩個查詢語句的索引使用情況。

IS NULL查詢條件:

mysql> explain SELECT * FROMtestWHERE col1 ISNULL \G
*************************** 1.row ***************************
           id: 1
  select_type: SIMPLE
        table: test
   partitions: NULL
         type: ref
possible_keys: idx_col1
          key: idx_col1
      key_len: 5
          ref: const
         rows: 14957
     filtered: 100.00
        Extra: Usingindex condition

可以看到,IS NULL查詢條件使用了索引。

IS NOT NULL查詢條件:

mysql> explain SELECT * FROMtestWHERE col1 ISNOTNULL \G
*************************** 1.row ***************************
           id: 1
  select_type: SIMPLE
        table: test
   partitions: NULL
         type: range
possible_keys: idx_col1
          key: idx_col1
      key_len: 5
          ref: NULL
         rows: 1558
     filtered: 100.00
        Extra: Usingindex condition

可以看到,IS NOT NULL查詢條件也使用了索引。

通過上面的三個實例,我們可以看到,無論是IS NULLIS NOT NULL都是有可能使用索引的。這也證明了網(wǎng)絡(luò)上一概而論并不正確。

下面,我們就具體分析一下IS NULLIS NOT NULL是否走索引的核心決定性因素。

索引是如何存儲NULL值的?

在分析MySQL是否使用索引的原因之前,我們先要了解一下針對NULL值,在索引中是如何存儲的。

在MySQL的InnoDB引擎中,聚簇索引一般是以主鍵作為存儲依據(jù),主鍵列的值不能為NULL。所以,針對這種情況,不存在NULL值存儲的問題。

對于非聚簇索引中的NULL值,在大多數(shù)數(shù)據(jù)庫實現(xiàn)中,NULL值在索引結(jié)構(gòu)中有以下特點:

  • B+樹的排序:NULL值通常被看作是最小值,因此索引存儲中,NULL會排在樹的最左邊。
  • 鏈表形式存儲:B+樹葉子節(jié)點存儲數(shù)據(jù)的引用,而葉子節(jié)點之間是順序鏈接的,也就是說,包含NULL的記錄會集中在最左側(cè),沿著鏈表可以順序讀取這些記錄。
  • 查找NULL值:當查詢列值為NULL時,數(shù)據(jù)庫的索引機制可以通過掃描樹的最左側(cè)開始查找所有NULL值。

索引失效的原因

通過上面關(guān)于NULL值索引的存儲,我們可以看到,在MySQL的InnoDB數(shù)據(jù)引擎中,NULL也是“有序”的,也可以通過索引(從最左側(cè)開始)進行查找的。大多數(shù)關(guān)系型數(shù)據(jù)庫也都支持對 NULL 值進行索引。

而真正決定IS NULL或 IS NOT NULL是否走索引的前提是索引能夠顯著降低執(zhí)行成本。在MySQL中,查詢優(yōu)化器會根據(jù)執(zhí)行成本決定是否使用索引,而不是單純地因為 NULL 或 IS NULL 的條件導(dǎo)致索引失效。

例如:

  • 如果通過索引查詢的結(jié)果集非常大(例如大多數(shù)記錄都為 NULL),那么索引命中的數(shù)據(jù)需要大量回表才能獲取完整的記錄,這種情況下,優(yōu)化器可能會選擇全表掃描,因為全表掃描的代價會更低。
  • 如果通過索引可以顯著減少數(shù)據(jù)訪問和回表的次數(shù)(例如查詢結(jié)果集很小或者覆蓋索引被使用),MySQL一般會選擇使用索引。

因此,關(guān)于NULL值索引失效,有以下相關(guān)結(jié)論:

  • NULL 值可以走索引,但是否使用索引取決于具體的執(zhí)行成本。
  • IS NULL 和 IS NOT NULL 本身不會直接導(dǎo)致索引失效,優(yōu)化器會根據(jù)數(shù)據(jù)量和數(shù)據(jù)分布動態(tài)選擇索引或全表掃描。
  • 非聚簇索引通常需要回表,回表成本過高時,優(yōu)化器可能放棄索引。
  • 查詢性能優(yōu)化需要結(jié)合具體的場景和數(shù)據(jù)分布分析,而不能簡單地說某些條件下索引會失效。

小結(jié)

通過上面的示例我們可以看到,在MySQL中,查詢條件使用IS NULL或 IS NOT NULL,理論上都會走索引。部分不走索引的情況也是因為優(yōu)化器判斷全表掃描的效率要高于使用索引,才導(dǎo)致放棄使用索引,而這與查詢條件為IS NULL或 IS NOT NULL本身沒有直接關(guān)系,只和執(zhí)行成本有關(guān)。

所以,針對IS NULL和 IS NOT NULL是否走索引,不能一概而論,還是要回歸到數(shù)據(jù)構(gòu)成本身,當然,原則上MySQL是會選擇走索引的。

責(zé)任編輯:武曉燕 來源: 師兄奇談
相關(guān)推薦

2017-09-05 09:02:06

Oraclenot null優(yōu)化

2025-06-04 02:55:00

MySQLNULL類型

2014-01-09 10:07:18

JavaScriptNull

2025-02-13 13:14:49

JavaScriptnullundefined

2021-06-07 07:59:29

MySQL數(shù)據(jù)庫 Get

2010-09-17 10:24:47

SQL中IS NULL

2021-05-11 20:31:46

Stringnull

2023-05-10 16:15:58

javaScript算法開發(fā)

2022-09-15 09:54:34

nullPython字符

2015-03-13 09:36:09

NULLnullptr

2017-10-24 14:05:16

MySQLSchema數(shù)據(jù)類型

2020-12-16 08:51:31

Shell腳本用途

2011-01-07 09:36:22

NullMySQL

2010-05-31 15:23:02

MySQL數(shù)據(jù)庫NUL

2018-02-06 08:32:09

MySQLNull程序員

2023-10-26 14:30:05

MySQLInnoDB

2025-01-20 07:10:00

LambdaJavanull

2023-12-07 11:47:00

TypeScript特殊值

2020-10-14 08:04:28

JavaScrip

2022-11-17 08:40:14

Linux輸出錯誤重定向
點贊
收藏

51CTO技術(shù)棧公眾號

国产夫妻自拍一区| 国产精品一二区| 日韩网站在线播放| 一呦二呦三呦精品国产| 亚洲欧美另类综合偷拍| 精品免费视频123区| 午夜视频网站在线观看| 欧美黄色免费| 亚洲性生活视频| 丰满少妇一区二区三区专区| 久久r热视频| 亚洲男同1069视频| 免费精品视频一区| 精品人妻无码一区二区| 丝袜亚洲精品中文字幕一区| 久久成年人视频| a级大片在线观看| 视频亚洲一区二区| 欧洲精品在线观看| 日本在线xxx| 国产在线观看a视频| 久久中文字幕电影| 国产精品一区二区三区在线观| 国产成人a v| 亚洲人体大胆视频| 欧美成人sm免费视频| www.99热| 国产欧美日韩一区二区三区四区| 精品少妇一区二区三区日产乱码| 久久国产精品国产精品| 在线最新版中文在线| 亚洲黄色片在线观看| 亚洲精品乱码久久久久久蜜桃91 | 国产一区第一页| 亚洲欧美成人vr| 亚洲精品在线电影| 亚洲欧美日韩网站| a一区二区三区亚洲| 欧美视频一区二区三区四区 | 99久久er| 欧洲一区二区三区在线| 鲁一鲁一鲁一鲁一色| 色www永久免费视频首页在线| 国产精品久久久久一区| 视频一区视频二区视频三区高| 人妻少妇精品无码专区| 福利视频网站一区二区三区| 亚洲一区精品电影| 国产色综合视频| 九九热在线视频观看这里只有精品| 日韩美女视频免费在线观看| 国产一区二区99| 国产精品美女| 欧美中文字幕在线观看| 欧美激情黑白配| 羞羞答答国产精品www一本| 97视频免费在线观看| 免费毛片一区二区三区| 99xxxx成人网| 欧美最顶级的aⅴ艳星| 极品国产91在线网站| 久久精品亚洲| 国产精品免费观看在线| 亚洲综合五月天婷婷丁香| 麻豆精品一区二区三区| 成人午夜一级二级三级| 精品人妻一区二区三区换脸明星| 国产剧情一区二区三区| 99爱精品视频| 日本美女一级片| 91免费看片在线观看| 欧美久久在线| 幼a在线观看| 亚洲码国产岛国毛片在线| 日本福利视频网站| 日韩欧美精品一区二区三区| 色香色香欲天天天影视综合网| jizz欧美激情18| 日韩精品一级毛片在线播放| 日韩精品一区二区三区四区视频| 久久精品女同亚洲女同13| 免费看成人哺乳视频网站| 中文字幕亚洲情99在线| 欧洲猛交xxxx乱大交3| 亚洲日韩成人| 国产精品久久久久久久久借妻| 国产精品乱码一区二区| jiyouzz国产精品久久| 日本午夜精品一区二区三区| 黄网站免费在线观看| 性做久久久久久免费观看| 99久久国产宗和精品1上映| 亚洲网站三级| 日韩精品视频三区| 黄色精品视频在线观看| 亚洲人成免费| 国产日韩视频在线观看| 欧美视频一二区| 亚洲国产精品二十页| 成人短视频在线观看免费| 亚洲涩涩在线| 日韩一区二区三区高清免费看看 | 美日韩黄色大片| 中文字幕久精品免费视频| 久久精品国产亚洲AV无码麻豆| 久久午夜av| 国产精品日韩高清| 天堂中文8资源在线8| 欧美性高跟鞋xxxxhd| 久久久久久国产精品日本| 欧美理论视频| 97精品视频在线观看| 一本久道久久综合无码中文| 99久久婷婷国产综合精品| 成人在线观看www| 三级成人在线| 日韩成人在线播放| 高h视频免费观看| 青娱乐精品视频在线| 国产精品夜夜夜一区二区三区尤| 在线a人片免费观看视频| 欧美特黄级在线| 日批免费观看视频| 综合一区二区三区| 国产精品久久97| 免费黄网站在线观看| 亚洲一区二区三区四区五区黄| 色综合色综合色综合色综合| 亚洲桃色综合影院| 性欧美xxxx| 亚洲va久久久噜噜噜无码久久| 欧美国产综合色视频| 激情综合网婷婷| 久草在线综合| 国内精品模特av私拍在线观看| 国产男女猛烈无遮挡| 中文字幕不卡在线播放| 成人免费在线播放视频| av在线播放天堂| 欧美h版在线观看| 日韩少妇与小伙激情| 中文字幕永久在线视频| 日本一区二区三区在线不卡| 国产一区二区视频免费在线观看| 日本亚洲不卡| 91av在线播放视频| 亚洲欧美日韩免费| 精品国产91乱高清在线观看 | 91色porny在线视频| 99在线精品免费视频| 风间由美性色一区二区三区四区 | 亚洲女人被黑人巨大进入al| 永久免费看片在线播放| www国产精品av| 色诱视频在线观看| 欧美综合一区| 国产有码一区二区| 国产不卡在线| 欧美成人精精品一区二区频| a级黄色片免费看| 成人激情综合网站| 欧美在线观看www| 免费一区二区三区视频导航| 国产成人精品日本亚洲| av午夜在线| 欧美丰满美乳xxx高潮www| 免费在线黄色网| 成人小视频在线观看| aa在线观看视频| 久久99性xxx老妇胖精品| 国产精品直播网红| 日韩免费影院| 亚洲精品xxxx| 波多野结衣不卡| 国产精品高潮呻吟| 日本美女视频网站| 欧美一区=区| 一区二区三区久久网| eeuss鲁片一区二区三区| 久久精品官网| 国产精品theporn88| 天堂av中文在线观看| 在线观看日韩www视频免费| 91福利在线观看视频| 亚洲一区二区三区四区在线免费观看 | 久久这里只有精品18| 天天久久夜夜| 91中文字幕在线| 亚洲欧美韩国| 久久精品男人天堂| 天堂a√中文在线| 色噜噜夜夜夜综合网| 亚洲天堂黄色片| 91色|porny| 亚洲精品乱码久久久久久动漫| 精品电影一区| 在线综合视频网站| 日韩欧美影院| 91久久中文字幕| 最新日韩精品| 欧美黑人又粗大| av天在线观看| 亚洲国产免费av| 亚洲字幕av一区二区三区四区| 亚洲国产一区二区在线播放| 91视频免费在观看| 99久久精品免费看| 中文字幕日韩久久| 首页国产欧美久久| 欧美高清中文字幕| 欧美gay男男猛男无套| 精品国产乱码久久久久久丨区2区 精品国产乱码久久久久久蜜柚 | 久久久影院官网| 香蕉视频xxxx| 日本午夜一本久久久综合| 欧美亚洲日本一区二区三区| 91精品国产乱码久久久久久| 日本在线成人一区二区| 国产精品巨作av| 18成人免费观看网站下载| 国产精品美女午夜爽爽| 欧美与欧洲交xxxx免费观看| 欧美videossex| 久久久国产精品一区| www.中文字幕久久久| 亚洲九九九在线观看| 熟妇人妻av无码一区二区三区| 欧美一级夜夜爽| 国产精品无码久久久久成人app| 欧美专区亚洲专区| 伊人手机在线视频| 精品日本高清在线播放| 久久中文字幕在线观看| 一二三区精品视频| 久草视频在线资源| 亚洲精品中文在线观看| 婷婷社区五月天| 国产精品污www在线观看| 国产aⅴ激情无码久久久无码| 91免费在线视频观看| www.色多多| 26uuu亚洲综合色| 挪威xxxx性hd极品| 欧美成人片在线| 国产精品国精产品一二| 卡通动漫国产精品| 日本不卡一区二区三区| 天涯成人国产亚洲精品一区av| 97在线看福利| 亚洲另类欧美日韩| 亚洲高清中文字幕| 国产精品18p| 精品成人久久av| 成人免费a视频| 一本大道久久a久久综合婷婷| 日日摸天天添天天添破| 色综合久久综合网97色综合| www.欧美色| 欧美主播一区二区三区| 男操女视频网站| 欧美欧美欧美欧美| 国产精品久久久久久久成人午夜| 欧美二区三区的天堂| 亚洲AV无码一区二区三区性| 精品国产一区二区三区久久影院| 蜜桃av鲁一鲁一鲁一鲁俄罗斯的| 日韩精品免费观看| yjizz视频网站在线播放| 日韩视频免费中文字幕| 伊人在我在线看导航| 午夜精品www| 亚洲成人一区在线观看| 91亚洲精品一区二区| 91精品短视频| 欧美一卡2卡3卡4卡无卡免费观看水多多 | 亚洲av成人片无码| 久久久亚洲精品石原莉奈| 99久久99久久精品免费| 一区二区三区波多野结衣在线观看 | 午夜欧美在线一二页| 国产在线观看黄色| 91麻豆精品国产91久久久久| 狠狠躁夜夜躁av无码中文幕| 亚洲码在线观看| 黄色网址在线免费播放| 97视频在线观看成人| 国产精品原创视频| 国产精品对白刺激久久久| 国产精品一区2区3区| 做爰高潮hd色即是空| 9色精品在线| 亚洲五月激情网| 久久久精品免费网站| 国产日韩欧美在线观看视频| 欧美性生交xxxxx久久久| 国产精品久久欧美久久一区| 日韩av在线免费观看一区| 午夜免费播放观看在线视频| 97在线观看视频国产| 99re8精品视频在线观看| 麻豆91蜜桃| 欧美精品福利| 男人搞女人网站| 99久久综合色| 久久机热这里只有精品| 欧美日韩国产另类一区| 视频三区在线观看| 久久精品电影一区二区| 日本精品裸体写真集在线观看| 国产不卡一区二区在线观看| 99精品视频精品精品视频| 欧美 日韩 国产一区| 成人丝袜高跟foot| 小泽玛利亚一区二区免费| 日本韩国欧美一区二区三区| 内射后入在线观看一区| 久久综合网hezyo| 成人影院在线免费观看| 久久久久久精| 影院欧美亚洲| 男人添女人荫蒂国产| 亚洲视频一区在线| 中文字幕在线日亚洲9| 日韩精品久久久久| 蜜桃视频在线观看播放| 国产麻豆乱码精品一区二区三区| 亚洲精品一区二区妖精| 国产 porn| 久久精品综合网| 天天干在线播放| 亚洲精品美女在线观看| 丁香花在线高清完整版视频| 99国精产品一二二线| 欧美不卡高清| 在线观看一区二区三区视频| 1000精品久久久久久久久| 91九色蝌蚪91por成人| 一区国产精品视频| 精品日韩视频| 午夜一区二区三区| 日本美女一区二区三区| 国产亚洲精品精品精品| 欧美日韩国产大片| 日韩三级影院| 成人做爰www免费看视频网站| 国产精品成久久久久| 亚洲激情在线看| 亚洲视频在线一区二区| 99久久免费国产精精品| 欧美成人自拍视频| av成人男女| 久久综合久久网| 91免费版在线| 国产成人无码专区| 在线播放国产精品| 中文成人激情娱乐网| dy888午夜| 东方aⅴ免费观看久久av| 国产无遮挡免费视频| 日韩av资源在线播放| 免费成人美女女| 亚洲毛片aa| 国产精品一区二区三区99| 国产午夜福利片| 亚洲欧美激情另类校园| 国产黄色一区| 国产精品日韩三级| 99re成人在线| 自拍偷拍色综合| 欧美成aaa人片免费看| 欧美理论电影在线精品| 黄色一级二级三级| 亚洲欧美另类图片小说| 天天射天天色天天干| 国产精品视频播放| 欧美成人tv| 人人妻人人澡人人爽人人精品| 在线观看91视频| 色爱综合区网| 日本一区二区三区精品视频| 国产在线精品不卡| 国产精品第9页| 中文字幕亚洲自拍| 91精品尤物| 在线看的黄色网址| 亚洲永久免费av| 国产在线资源| 成人性色av| 日本成人超碰在线观看| 国产污视频在线看| 一区二区三区动漫| 盗摄牛牛av影视一区二区| 亚洲精品怡红院| 亚洲v中文字幕| 日本最新在线视频| 好吊色欧美一区二区三区| 久久99国产精品免费| 六月丁香激情综合| 九九热这里只有精品6| 精品国产不卡|