1. 程式人生 > 其它 >聯合主鍵可以有一個為null麼_SQL 中 IS NULL 可以走索引

聯合主鍵可以有一個為null麼_SQL 中 IS NULL 可以走索引

技術標籤:聯合主鍵可以有一個為null麼

SQL 中 IS NULL 可以走索引

測試程式碼

CREATE TABLE IF NOT EXISTS `book`(
   `runoob_id` INT UNSIGNED AUTO_INCREMENT,
   `runoob_title` VARCHAR(100) ,
   `runoob_author` VARCHAR(40) ,
   `submission_date` DATE,
   PRIMARY KEY ( `runoob_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `book` ADD INDEX index_name (`runoob_title`) 

show index from book


INSERT INTO book (runoob_id, runoob_title,runoob_author,submission_date) VALUES (2, 'C++','xiaoming',now())

INSERT INTO book (runoob_id, runoob_title,runoob_author,submission_date) VALUES (2, NULL,'xiaoming',now())


EXPLAIN select * from book where runoob_title='Java'

EXPLAIN select * from book where runoob_title IS  NULL

以上實驗都是在欄位接受null值的條件下做的實驗。在欄位not null的情況下,is null和is not null都不會走索引。

73c2f5cca1e98352b88b51b778e242b2.png

type:表示MySQL在表中找到所需行的方式,又稱“訪問型別”(ALL、index、range、ref、eq_ref、const、system、NULL),由左至右,由最差到最好

  • ALL:Full Table Scan, MySQL將遍歷全表以找到匹配的行
  • index:Full Index Scan,index與ALL區別為index型別只遍歷索引樹
  • range:索引範圍掃描,對索引的掃描開始於某一點,返回匹配值域的行,常見於between、<、>等的查詢
  • ref:非唯一性索引掃描,返回匹配某個單獨值的所有行。常見於使用非唯一索引即唯一索引的非唯一字首進行的查詢
  • eq_ref:唯一性索引掃描,對於每個索引鍵,表中只有一條記錄與之匹配。常見於主鍵或唯一索引掃描
  • const、system:當MySQL對查詢某部分進行優化,並轉換為一個常量時,使用這些型別訪問。如將主鍵置於where列表中,MySQL就能將該查詢轉換為一個常量
  • system是const型別的特例,當查詢的表只有一行的情況下, 使用system NULL:MySQL在優化過程中分解語句,執行時甚至不用訪問表或索引

參考資料

  • https://www.cnblogs.com/wd326150354/p/11022093.html

歡迎關注程式設計師開發者社群

2e10112b1c64b45c96dec9e8ddf311f0.png