• mysql 索引优化


    前言

    在根据执行计划对SQL进行分析之后,逐步的去优化每个子查询的索引以及成本使用情况,执行计划我的理解就是用来对索引进行逐步的优化的一个过程。让每个查询都尽量使用索引,在索引过程中,索引会经常性失效。

    口诀

    全值匹配我最爱,最左前缀要遵守
    带头大哥不能死,中间兄弟不能断
    索引列上少计算,范围之后全失效
    LIKE符号写最后,覆盖索引不写*
    不等空值还是OR,索引失效要少用
    var引号不能丢,SQL高级也不难
    分组之前必排序,一定要上索引啊
    

    建立索引注意事项

    • 单值索引,尽量选择过滤性更好的字段。【eg: 性别字段,过滤比例为50%,不建议建索引】
    • 组合索引,索引字段的顺序可以按照识别度进行排序,识别度越高,放在越靠前
    • 组合索引,尽量包含where语句中的更多字段
    • 尽可能的根据分析执行计划,统计信息,去调整query的写法达到适合索引的目的

    索引容易失效的几个点

    • 不在索引列上做任何操作【计算,函数,类型转换】,无法使用索引,会全表扫描
    • 组合索引中,如果中间某个字段使用了范围条件,则右边的索引列失效
    • 尽量使用覆盖索引【索引列和查询列一致,即数据直接在索引表中就可以获取】
    • mysql 在使用不等于*(!= or <>)的时候,无法使用索引,会全表扫描
    • is null , is not null 也无法使用索引,故建表时要有默认值
    • like 通配符必须放在索引列的右边,否则索引失效,会全表扫描
    • 字符串不加单引号,索引会失效
    • 少用or , 用它连接索引会失效
  • 相关阅读:
    Linux
    memory库函数的实现
    剑指Offer面试题1
    Linux
    Linux-配置vim开发环境
    Linux-Find命令
    busybox,alphine,ubuntu,centos/fedore操作系统
    端口映射与容器互联
    docker 数据管理数据卷
    Celery
  • 原文地址:https://www.cnblogs.com/yinguohai/p/11505480.html
Copyright © 2020-2023  润新知