zoukankan      html  css  js  c++  java
  • MySQL索引优化

    SQL性能下降原因

    SQl性能下降会导致执行时间长,等待时间长。

    导致SQL性能下降的原因有4点:

    • 查询语句写的不好
    • 索引失效
    • 关联查询,太多join
    • 服务器调优以及各个参数设置,比如缓冲、线程等

    索引简介

    索引是帮助MySQl高效获取数据的数据结构,索引是数据结构。索引的目的在于提高查询效率,在这些数据结构的基础上实现高级查找算法。

    索引本身很大,往往以索引文件的形式存储在磁盘上,一般索引都是B树结构、B+树结构、哈希结构。

    索引优缺点

    索引优点:

    • 降低数据库的IO开销,提高检索效率后,读取的数据少了
    • 降低CPU的消耗,排序的时候直接通过索引排序

    索引缺点:

    • 索引也要占用空间
    • 提高了查询速度,降低了更新表的速度,更新数据的同时,还要对其建立索引,因此速度慢了
    • 很难建立最优的索引

    索引分类

    • 单值索引:一个索引只包含单个列,一个表可以有多个单列索引
    • 唯一索引:索引列的值必须唯一,允许有空值
    • 复合索引:一个索引包含多个列

    建立索引的情况

    1. 主键自动建立唯一索引
    2. 频繁作为查询条件的字段应该建立索引
    3. 查询中与其他表关联的字段,外键关系建立索引
    4. 频繁更新的字段不适合建立索引,每次更新数据需要更新索引
    5. where条件里用不到的字段不创建字段
    6. 查询中要排序的字段,排序字段通过索引,会提高排序速度

    其中,表记录太少(百万以下),频繁更新的表,数据重复且分布平均的字段,这些情况不适合建立索引。

    索引优化

    避免范围查询,会使索引失效。等值查询是最优的。多表查询时,小表驱动大表,小表建立索引。尽量使用覆盖索引,只访问索引的查询。

    索引失效情况

    1. 最佳左前缀法则,如果索引多列,要遵守最左前缀法则,查询从最左前列开始,否则索引失效。如果查询字段跳过索引中间列,会造成索引部分使用,部分失效。
    2. 不在索引列上做任何操作,计算,函数等,会导致索引失效而转向全表扫描。
    3. 范围查询会使索引失效。
    4. 使用!=和<>的时候会使索引失效导致全表扫描
    5. is null,is not null也会使索引失效
    6. like'%string',%开头会使索引失效,可以放右边。或覆盖索引,避免索引失效。
    7. 字符串不加单引号,索引失效
    8. or连接时,索引失效
  • 相关阅读:
    “sockaddr”: “struct”类型重定义的错误的解决办法《转》
    2019年车险
    tinylib
    命令行利用ffmpeg实现rtmp推流《转》
    Inno setup 判断系统32位还是64位
    vs2015编译OBS-Studio21.1.12
    啃OBS源码-界面汉字
    百年孤独人物关系1
    windows命令行查看文件MD5
    python 玩爬虫安装了一大堆第三方库
  • 原文地址:https://www.cnblogs.com/chenshaowei/p/12591162.html
Copyright © 2011-2022 走看看