zoukankan      html  css  js  c++  java
  • 索引何时需要、何时不需要、何时失效

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

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

    原因:比起全表扫描,分析两个索引B+表更耗时

    何时需要索引?

    1、所查询字段是主键(主键可以认为是索引)

    2、和其他表做连接查询的字段

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

    4、不以通配符开始的like,如'aa%'

    5、聚集函数max()、sum()等使用得字段

    6、order by和group by的字段

    何时不需要索引?

    1、表记录很少

    2、数据重复且分布平均

    3、经常插入、删除、修改的表

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

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

    索引错误使用情形总结:

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

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

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

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

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

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

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

  • 相关阅读:
    mysql5.7 tar包安装
    jpa2.0以上findOne和getOne的区别
    终端设置代理
    virtualbox EFI安装Archlinux
    无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]
    代理模式笔记
    Mybatis详细的执行流程
    javaweb超市管理系统demo
    CF1409F Subsequences of Length Two
    1002: [FJOI2007]轮状病毒 基尔霍夫矩阵
  • 原文地址:https://www.cnblogs.com/yanze/p/11045642.html
Copyright © 2011-2022 走看看