MySQL 是一個流行的關系型數據庫管理系統,它支持索引來優化查詢性能。然而,在某些情況下,索引可能會失效,導致查詢變慢甚至無法使用索引。
以下是一些會導致索引失效的情況:
1. 使用了函數或表達式 SELECT * FROM users WHERE YEAR(created_at) = 2021; 2. 對列進行了計算或類型轉換 SELECT * FROM users WHERE age + 1 = 18; 3. 對表進行了類型轉換 SELECT * FROM users WHERE id = '1'; 4. 模糊查詢(LIKE) SELECT * FROM users WHERE name LIKE '%John%'; 5. 不帶前綴的通配符查詢 SELECT * FROM users WHERE email LIKE '.com'; 6. 非等值查詢(<>、!=、>、<、>=、<=) SELECT * FROM users WHERE age<>18; 7. 在聯合查詢中未使用索引的列 SELECT * FROM users JOIN orders ON users.id = orders.user_id WHERE orders.status = 'pending'; 8. 查詢條件中含有 OR 子句 SELECT * FROM users WHERE name = 'John' OR email = 'john@example.com'; 9. 數據分布不均勻,導致索引失效
因此,在設計數據庫時,應該遵循最佳實踐,避免使用不利于索引的查詢語句,以保證查詢性能。