簡體   English   中英

MySQL的B+樹上是否存儲空值?

[英]Whether null value is stored on B + tree in MySQL?

mysql 5.7 innodb

EXPLAIN SELECT a FROM test WHERE a IS NULL;

a 可以為空,a 為普通索引;我們可以看到: 額外信息:使用 where;使用索引; 這意味着索引存儲空值?

在此處輸入圖片說明

在分析索引時,將NULL視為“只是另一個值”。

您特定的SELECT沒有做太多事情。 它將執行“索引掃描”,因為所需的所有列(只是a )都在INDEX inx_a (a) (您顯然擁有)中。 也就是說,索引是“覆蓋”的。 它不應該需要“完整索引掃描”(查看所有“行”)。

NULL值將首先出現在索引中; 它應該執行“索引掃描”,例如:

  1. 一開始就深入索引的 BTree。
  2. 讀取“行”,直到遇到NULL以外的其他內容; 交付a .

在某些情況下,優化器會避開明顯的INDEX而只是進行“表掃描”,但這里似乎並非如此。 例如,因為大多數行都有a IS NULL ,以下很可能會忽略索引並進行表掃描:

SELECT a,b FROM t WHERE a IS NULL

OTOH, INDEX(a,b)將是一個“覆蓋索引”,它應該在索引中進行“范圍掃描”。

如果您想進一步討論,請提供SHOW CREATE TABLE作為文本而不是圖像

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM