mysql is null走索引_Mysql数据库索引IS NUll ,IS NOT NUll ,!= 是否走索引
聲明在前面
總結(jié)就是 不能單純說 走和不走,需要看數(shù)據(jù)庫版本,數(shù)據(jù)量等 ,希望不要引起大家的誤會,也不要被標(biāo)題黨誤導(dǎo)了。
1 數(shù)據(jù)庫版本:
2 建表語句
CREATE TABLE s1 (
id INT NOT NULL AUTO_INCREMENT,
key1 VARCHAR(200),
key2 VARCHAR(200),
key3 VARCHAR(200),
key_part1 VARCHAR(200),
key_part2 VARCHAR(200),
key_part3 VARCHAR(200),
common_field VARCHAR(200),
PRIMARY KEY (id)
) ENGINE=INNODB CHARSET=utf8;
3 建索引語句
CREATE INDEX isz_key1 ON s1(key1);
CREATE INDEX isz_key2 ON s1(key2);
CREATE INDEX isz_key3 ON s1(key3);
CREATE INDEX idx_key_part ON s1 (key_part1, key_part2, key_part3);
4 鋪底數(shù)據(jù)
DELIMITER $$
CREATE PROCEDURE pre ()
BEGIN
DECLARE i INT;
SET i= 0;
WHILE
i< 9000DO
INSERT INTO s1 (
key1,
key2,
key3,
key_part1,
key_part2,
key_part3,
common_field
)
VALUES
('a','注意應(yīng)收熱熱賬款狀態(tài)為有效狀態(tài)下,資源編號與應(yīng)熱熱付流水號一一對應(yīng),(已結(jié)傭、已熱熱、已失效3種情況為無效熱熱,其他均為有效狀態(tài))','cc','a應(yīng)收賬款狀態(tài)為a','cc','注意應(yīng)erect賬款狀態(tài)為有效狀態(tài)下,資源編號與應(yīng)付流水號一一對應(yīng),(已結(jié)傭、已熱熱無效、已失效3種情況為熱熱狀態(tài),其他均為有效狀態(tài))','ddff');
SET i= i + 1;
END WHILE;
END $$
CALL pre ();
DROP PROCEDURE pre;
select COUNT(1)FROM s1;
IS NULL ,IS NOT NUll 是否走索引
EXPLAIN SELECT *FROM s1 WHERE s1.`key1` IS NULL; 表里 key1 為is null的總數(shù)為0 查詢is null 走索引
EXPLAIN SELECT *FROM s1 WHERE s1.`key1` IS not NULL; 表里 key1 的列 is not null 的總數(shù)為0,不存在值為null 查詢is not null 不走索引
?Is null count為19012條 ,is not count為9條 實驗結(jié)果 is null 和 is not null 都走索引
?測試application 表,is null count有305條,表總有324條 ,is null 不走索引
總結(jié):并不是 is null ,is not null走和不走索引是和數(shù)據(jù)量或者和其他元素有關(guān)系(這里我只是測試到和數(shù)據(jù)量有關(guān)系) sql優(yōu)化器在執(zhí)行的時候會計算成本,其實和基數(shù),選擇性,直方圖有關(guān),其實就是看你所搜索的部分占全表的比例是走索引還是全表成本低。
!=走索引嗎?
<> 和!= 是同一個意思 ,都是不等于
測試一? <> 走索引,存在<>的數(shù)據(jù)量有9條
測試二<>走索引存在不等于的數(shù)據(jù)量有305條
? ?測試三 <> 不走索引 值都是“abc”,不是“abc”的總條數(shù)為0
SELECT COUNT(1)FROM s1 WHERE s1.`key3` ='abc'; -- 0
測試四 <>走索引
總結(jié):并不能一句話說 走和不走,需要看條件,比如數(shù)據(jù)量,等于“abc”的數(shù)據(jù)量和不等于“abc”的量,mysql在執(zhí)行的時候會判斷走索引的成本和全表掃描的成本,然后選擇成本小的那個
總結(jié)
以上是生活随笔為你收集整理的mysql is null走索引_Mysql数据库索引IS NUll ,IS NOT NUll ,!= 是否走索引的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redmi Note 12 Turbo
- 下一篇: mysql表空间大小_浅谈mysql中各