聯合主鍵可以有一個為null麼_SQL 中 IS NULL 可以走索引
阿新 • • 發佈:2020-12-20
技術標籤:聯合主鍵可以有一個為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都不會走索引。
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