日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql is null走索引_Mysql数据库索引IS NUll ,IS NOT NUll ,!= 是否走索引

發布時間:2023/12/19 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql is null走索引_Mysql数据库索引IS NUll ,IS NOT NUll ,!= 是否走索引 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

聲明在前面

總結就是 不能單純說 走和不走,需要看數據庫版本,數據量等 ,希望不要引起大家的誤會,也不要被標題黨誤導了。

1 數據庫版本:

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 鋪底數據

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','注意應收熱熱賬款狀態為有效狀態下,資源編號與應熱熱付流水號一一對應,(已結傭、已熱熱、已失效3種情況為無效熱熱,其他均為有效狀態)','cc','a應收賬款狀態為a','cc','注意應erect賬款狀態為有效狀態下,資源編號與應付流水號一一對應,(已結傭、已熱熱無效、已失效3種情況為熱熱狀態,其他均為有效狀態)','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的總數為0 查詢is null 走索引

EXPLAIN SELECT *FROM s1 WHERE s1.`key1` IS not NULL; 表里 key1 的列 is not null 的總數為0,不存在值為null 查詢is not null 不走索引

?Is null count為19012條 ,is not count為9條 實驗結果 is null 和 is not null 都走索引

?測試application 表,is null count有305條,表總有324條 ,is null 不走索引

總結:并不是 is null ,is not null走和不走索引是和數據量或者和其他元素有關系(這里我只是測試到和數據量有關系) sql優化器在執行的時候會計算成本,其實和基數,選擇性,直方圖有關,其實就是看你所搜索的部分占全表的比例是走索引還是全表成本低。

!=走索引嗎?

<> 和!= 是同一個意思 ,都是不等于

測試一? <> 走索引,存在<>的數據量有9條

測試二<>走索引存在不等于的數據量有305條

? ?測試三 <> 不走索引 值都是“abc”,不是“abc”的總條數為0

SELECT COUNT(1)FROM s1 WHERE s1.`key3` ='abc'; -- 0

測試四 <>走索引

總結:并不能一句話說 走和不走,需要看條件,比如數據量,等于“abc”的數據量和不等于“abc”的量,mysql在執行的時候會判斷走索引的成本和全表掃描的成本,然后選擇成本小的那個

總結

以上是生活随笔為你收集整理的mysql is null走索引_Mysql数据库索引IS NUll ,IS NOT NUll ,!= 是否走索引的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。