zoukankan      html  css  js  c++  java
  • MySQL(三)索引优化规约

    一、引言

      我们都知道索引是为了提高数据检索的性能,但是不合适的索引或者使用不当等因素,也会使得索引失效导致全表扫描,这篇文章简单汇总一下索引优化的原则。

    二、索引优化规约【重要】

    • 1、直接用索引列当查询条件
    • 2、最左前缀法则
    • 3、不在索引列上做任何运算操作
    • 4、把带范围的查询条件放在sql最后
    • 5、尽量使用覆盖索引,减少 select * 语句
    • 6、避免使用不等于(!=或者<>),not in ,not exists 等查询
    • 7、范围条件如<、>、<=、>= 这些,mysql内部优化器会根据检索比例、表大小等多个因素整体评估是否使用索引,尽量优化掉范围索引
    • 8、尽量避免is null、is not null判空条件
    • 9、like不要以通配符开头
    • 10、字符串类型字段当搜索条件时,加上单引号,否则索引失效
    • 11、少用or或in,mysql不一定使用索引

    三、使用示例

    全值匹配

    最左前缀法则

    不在索引列上做任何运算操作

    把带范围的查询条件放在sql最后

      若查询条件带范围的,应把这个查询条件放最后,存储引擎不能使用索引中范围条件右边的列。

    尽量使用覆盖索引,减少 select * 语句

      尽量使用覆盖索引,即只访问索引列,减少不必要的select *语句。

    避免使用不等于(!=或者<>),not in ,not exists 等查询

      mysql在使用不等于(!=或者<>),not in ,not exists 的时候有可能无法使用索引会导致全表扫描

    尽量避免is null、is not null判空条件

      is null、is not null 一般情况下也无法使用索引,尽量避免这种判空条件作为查询语句,可以在表设计阶段设置好默认值

    like不要以通配符开头 

      like以通配符开头('&有梦想...')mysql索引失效会变成全表扫描操作。

      PS:若like条件通配符不在开头,是会用上索引进行范围过滤的

    字符串类型字段当搜索条件时,加上单引号,否则索引失效

    四、索引使用总结

      通过一个表格来简单总结下各种情况下,索引是否能用上:

  • 相关阅读:
    基于jquery的弹幕实现
    Cookie在顶级域名、二级域名和三级域名之间共享的情况
    报错:Win10 这台计算机中已经安装了 .NET Framework 4.5.2/4.6.1/4.7.1等等任何版本 或版本更高的更新
    Unity中的Text内容有空格导致换行
    逆波兰表达式
    Java基础03 byte[] 与 16进制字符串之间的转换
    nacos Linux 单机模式配置
    Oracle 常用SQL
    软件安装01 Linux下redis安装
    Java基础04 JSONObject 与范型对象转换
  • 原文地址:https://www.cnblogs.com/riches/p/14755799.html
Copyright © 2011-2022 走看看