当前位置:   article > 正文

mysql优化—索引失效情况_mysql主键id为varchar不能走索引吗

mysql主键id为varchar不能走索引吗

1. 参数类型错误

例1:id为varchar类型可以使用索引

例2:id为varchar类型,实际使用数字类型,不能使用索引

 

 例3:age为bigint类型,可以使用索引

 

 例4:age为bigint类型,实际使用字符串类型,可以使用索引

结论:

数字类型的可以使用字符串类型,字符串类型的不能使用数据类型

2.范围查询,搜索引擎会评估,如果全表扫描的效率比走索引快,就不走索引,直接进行全表扫描

例1:num被索引,引擎评估走索引效率高,走索引

 

 例2:num被索引,引擎评估走全表扫描效率高,直接进行全表扫描

 结论: 

1) 对于范围查询,当全表查询的效率高于走索引时,就会使用全表扫描

2) 字符串类型同样使用1) 规则

3. like操作符

例1:city_name有索引,右模糊匹配,可以使用索引 

 例2:city_name有索引,左模糊匹配,不能使用索引 

 

  例3:city_name有索引,左模糊匹配,只查询索引字段,可以使用索引

 例4:city_name,age为复合索引,左模糊匹配,只查询索引字段,可以使用索引

 

注意:从这个例子可以知道,如果需求就是要求要左模糊匹配,可以用两种解决方法:

        1)  添加复合索引,例如例4中,根据city_name查询age,不过这种要额外的加索引,

             如果要加的复合索引不多,这种方法可以用

        2) 先通过模糊查询查询出id,然后再通过id查询所需字段,这种不需要额外添加索引,应用场景比较多

4. !=, <>

age字段有索引,表中有8条数据,其中一条数据age是22,其余都是2

 

 

结论:<> 与 !=测试结果一样,从上面两个例子中可以知道:

          1). 当结果数据集占总数据量比重较小时,!=和<>都可以使用索引

           2). 当结果数据集占总数据量比重较大时,!=和<>都不能使用索引

                实际业务中这种情况比较多,所以还是尽量少用不等于操作符

           3). 对于字符串类型,!=和<>都不能使用索引

5. is null / is not null

例1:num字段加索引,表中有8条数据,其中2条数据num不为空

 例2:num字段加索引,表中有8条数据,其中2条数据num为空

 

  

 

结论:从上面两个例子中可以知道:

    1). 当结果数据集占总数据量比重较小时,is null和is not null都可以使用索引

    2). 当结果数据集占总数据量比重较大时,is null和is not null都不能使用索引

 6. in / not in

 例2:num字段加索引,表中有8条数据,其中1条数据num为2,其它都是1

 

 

 

 

 

 

 结论:从上面例子中可以知道:

    1). 当结果数据集占总数据量比重较小时,in和not in 都可以使用索引

    2). 当结果数据集占总数据量比重较大时,in和not in 都不能使用索引

    3). 对于字符串类型,in和not in 都不能使用索引

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/381386
推荐阅读
相关标签
  

闽ICP备14008679号