SQL優化方案
- 注意具有索引列的查詢條件,避免造成索引失效(具體看如下的索引失效規則)
- 對於數據重複多的列,無需建立索引
- 索引並非越多越好,索引越多,對增刪改的速度就會越慢
- select 結果中,避免使用*符號,只返回有用的字段
使查詢放棄索引進行全表搜索的操作
- where語句中使用 != 和 <>
- 使用 null判斷,例如: where name is null / name is not null
- 索引列數據中包含 null,索引失效
- 在範圍條件語句後面的列索引都會失效;例如 where name = ‘Kellan’ and age > 10 and sex = ‘男’; 其中只有name字段的索引有效
- 模糊查詢中,將%放在字段前面,則索引失效;即 where name like ‘%Kellan’ . 與 where name like ‘Kellan%’。前者索引失效
- 避免直接對索引字段進行 計算與使用函數;都會使索引失效
- 避免使用 or條件判斷,索引會失效,進行全表搜索; 可以使用 union代替
- in 和 not in要慎用,否則會導致全表搜索; 如果是連續的值,可是使用between代替;或者可以先使用子查詢,降低搜索的數據量,再使用in 和 not in; 比如: select * from (子查詢) where id in (1,2,3);