使用索引的注意事項
IPFS
- 複合索引的欄位順序
-- index column: {a, b, c}
*-- 相當於建立 {a}, {a, b}, {a, b, c} 三個索引,但因為是*複合*索引所以不存有三顆樹*
-- 最左前綴匹配原則(用到最左邊的欄位才算複合索引,且優先對最左邊的字段進行排序)
-- good
SELECT * FROM table WHERE a = ?;
SELECT * FROM table WHERE a = ? AND b = ?;
SELECT * FROM table WHERE b = ? and a = ?;
-- bad (full scan)
SELECT * FROM table WHERE b = ?;
SELECT * FROM table WHERE c = ?;
SELECT * FROM table WHERE b = ? AND c = ?;
- 盡可能使用索引做排序(索引本身就有排序)
-- index column: {age} -- good usage SELECT * FROM user WHERE age <= 30 ORDER BY age; -- bad:filesort (排序的时候不能用上索引),需要另外使用記憶體 SELECT * FROM user WHERE age <= 30 ORDER BY name; -- 複合索引 -- index column: {age, name} -- sort by age as default
- 索引太多,優化器混亂
對多個欄位進行多種組合索引,會使用不少空間建立 b+ 樹,也會讓 mysql 優化器選錯索引
喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!