如何防止建立的索引失效?
阿新 • • 發佈:2018-12-13
(一)在使用索引的時候,需要注意的幾個地方來防止索引的失效
- 當你使用索引的時候,最好能夠把你建立的索引的欄位都給用到。不僅可以提供查詢的效率
- 最佳左字首法則,意思就是當你如果有建立過多個欄位索引的組合索引的時候,最要遵循最左字首法則,就是指當MySQL在使用索引查詢的時候不會跳過中間已經建立好的索引列
- 不能在索引列上做任何操作(比如使用函式、計算、型別轉換),這樣也會導致索引失效然後進行全表掃描。
- 儲存引擎不能使用你已經建立好的索引的範圍條件右邊的列(如果建立的索引欄位是 name、age、sex的時候也就是在select * goods from name = ‘wangwei’ and age >20 and sex=‘男’ )這條語句的sex索引就會失效
- 儘量使用覆蓋索引,也就是你建立的索引欄位都要用到,減少select * 的使用
- MySQL在使用 !=、< ,> 的時候會導致索引失效,然後進行全表掃描
- 如果SQL語句中出現is null 或者 is not null 的時候也會出現索引失效
- 如果使用like關鍵字的時候也會導致索引失效,如果業務允許可以只匹配(‘張三%’)後者的情況下並不會導致索引失效的問題,但是如果是(‘%張三’)這種情況的話就會導致索引失效的問題
- 如果使用的索引欄位需要匹配的欄位型別是varchar型別的話,若不加單引號 ‘ ’ 的話也會導致索引失效,違反了第3條
- 少用or,因為用or的話也會導致索引失效的問題
(二)如何多表關聯的話怎麼去建立不同的索引?
- 如果是在單表的情況下,我們一般儘量避開給範圍查詢的欄位進行建立索引
- 如果是兩個表關聯的話(特別是使用left join 的時候)我們一般都是給右表的欄位進行建立索引,如果是或者 使用right join的時候我們一般都是給左表的欄位建立索引
- 如果是三個表關聯的話,一般都是遵循2的基礎上進行建立的