Mysql索引可能失效的場景

2021-09-02 20:55:24 字數 903 閱讀 9059

1.where字句的查詢條件裡有不等於號(where column!=…),mysql將無法使用索引

2.類似地,如果where字句的查詢條件裡使用了函式(如:where day(column)=…),mysql將無法使用索引

3.在join操作中(需要從多個資料表提取資料時),mysql只有在主鍵和外來鍵的資料型別相同時才能使用索引,否則即使建立了索引也不會使用

4.如果where子句的查詢條件裡使用了比較操作符like和regexp,mysql只有在搜尋模板的第乙個字元不是萬用字元的情況下才能使用索引。比如說,如果查詢條件是like 'abc%',mysql將使用索引;如果條件是like '%abc',mysql將不使用索引。

5.在order by操作中,mysql只有在排序條件不是乙個查詢條件表示式的情況下才使用索引。儘管如此,在涉及多個資料表的查詢裡,即使有索引可用,那些索引在加快order by操作方面也沒什麼作用。

6.如果某個資料列裡包含著許多重複的值,就算為它建立了索引也不會有很好的效果。比如說,如果某個資料列裡包含了淨是些諸如「0/1」或「y/n」等值,就沒有必要為它建立乙個索引。

7.索引有用的情況下就太多了。基本只要建立了索引,除了上面提到的索引不會使用的情況下之外,其他情況只要是使用在where條件裡,order by 字段,聯表字段,一般都是有效的。 建立索引要的就是有效果。 不然還用它幹嗎? 如果不能確定在某個欄位上建立的索引是否有效果,只要實際進行測試下比較下執行時間就知道。

8.如果條件中有or(並且其中有or的條件是不帶索引的),即使其中有條件帶索引也不會使用(這也是為什麼盡量少用or的原因)。注意:要想使用or,又想讓索引生效,只能將or條件中的每個列都加上索引

9.如果列型別是字串,那一定要在條件中將資料使用引號引用起來,否則不使用索引

10.如果mysql估計使用全表掃瞄要比使用索引快,則不使用索引

MySQL 索引可能失效場景

mysql 索引可能失效場景 2017 07 12 11 29 43 0 u013595570的部落格 收藏我要投稿 1 where子句的查詢條件裡有where column!mysql將無法使用索引 2 where子句的查詢條件中使用了函式,mysql將無法使用索引 3 如果條件有or,即使其中有...

MySQL 索引可能失效場景

1 where子句的查詢條件裡有where column!mysql將無法使用索引 2 where子句的查詢條件中使用了函式,mysql將無法使用索引 3 如果條件有or,即使其中有條件帶索引也不會使用 這也是為什麼建議少使用or的原因 如果想使用or,又想索引有效,只能將or條件中的每個列加上索引...

mysql 索引失效場景 Mysql 索引失效場景

例如 一張user表 有欄位屬性 name,age 其中name為索引 下面列舉幾個索引失效的情況 1.select from user where name xzz or age 16 例如這種情況 當語句中帶有or的時候 即使有索引也會失效。2.select from user where na...