MySQL --- 索引失效情況
阿新 • • 發佈:2021-01-20
技術標籤:MySQL
MySQL --- 索引失效
案例分析使用到的SQL
CREATE TABLE staffs(
id INT PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(24)NOT NULL DEFAULT'' COMMENT'姓名',
`age` INT NOT NULL DEFAULT 0 COMMENT'年齡',
`pos` VARCHAR(20) NOT NULL DEFAULT'' COMMENT'職位',
`add_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT'入職時間'
)CHARSET utf8 COMMENT'員工記錄表';
INSERT INTO staffs(`name`,`age`,`pos`,`add_time`) VALUES('z3',22,'manager',NOW());
INSERT INTO staffs(`name`,`age`,`pos`,`add_time`) VALUES('July',23,'dev',NOW());
INSERT INTO staffs(`name`,`age`,`pos`,`add_time`) VALUES ('2000',23,'dev',NOW());
ALTER TABLE staffs ADD INDEX index_staffs_nameAgePos(`name`,`age`,`pos`)
MySQL索引失效有以下情況:
最佳左字首法則失效
當使用複合索引時,即索引使用到從左邊開始,按順序使用,可以少,但是中間不能斷
案例:
索引使用成功:
1.索引全部使用
2.部分使用索引
索引失效:
1.索引失效情況一:沒有帶頭大哥欄位 ,失效
2.索引失效情況二:索引中間中斷,索引部分使用
不要在索引列上做任何操作
這是指不要在索引列上進行計算、函式、手動或自動的型別轉換,都會導致索引失效
儲存引擎不能使用索引中範圍條件右邊的列
即在 WHERE 條件中的範圍查詢會使索引失效
例子:
可以看出在 age > 23 這個條件之後的索引就失效了