索引什么时候须要、什么时候不须要、什么时候失效

总结自:https://blog.csdn.net/weixin_39420024/article/details/80040549mysql

前提:每次查询都只能使用一个索引sql

缘由:比起全表扫描,分析两个索引B+表更耗时函数

 

什么时候须要索引?spa

一、所查询字段是主键(主键能够认为是索引).net

二、和其余表作链接查询的字段blog

三、在where里使用>、≥,=,<,≤,<>,is null和between等字段索引

四、不以通配符开始的like,如'aa%'字符串

五、汇集函数max()、sum()等使用得字段im

六、order by和group by的字段总结

 

什么时候不须要索引?

一、表记录不多

二、数据重复且分布平均

三、常常插入、删除、修改的表

四、text、image等数据量大的类型

五、特殊状况,有时mysql会估算这次查询,全表扫描比使用索引更为省时,则不会使用索引

 

索引错误使用情形总结:

一、组合索引未使用最左前缀,例如:组合索引(a,b),而查询条件是where b="1"

二、like通配符在最左边,例如:where a like '%aa'

三、在查询条件中使用索引,order by里也使用索引,例如:where a='1' order by b,由于每次查询只会使用一个索引,这里只会使用a的索引

四、or会使得索引失效,例如:where a= 1 or b=2

特殊状况:若or两边的条件使用的字段同样,索引依旧会有效,例如:where a=1 or a=2

五、若是列类型是字符串,要使用引号。例如where A='China',不然索引失效(会进行类型转换)

六、在索引列上的操做,函数(upper()等)、or、!=(<>)、not in等

相关文章
相关标签/搜索