• MySQL查询性能优化


    引用:https://www.cnblogs.com/boothsun/p/8480909.html

    1、索引原则:

    • 最左匹配前缀原则,联合索引
    • 如果确定有多少条数据,使用 limit 限制一下,MySQL在查找到对应条数的数据的时候,会停止继续查找
    • join 语法,尽量将小的表放在前面,在需要on的字段上,数据类型保持一致,并设置对应的索引,否则MySQL无法使用索引来join查询
    • 尽量选择区分度高的列作为索引
    • 索引列不能参与计算,保持列“干净”
    • 尽量的扩展索引,不要新建索引
    • or分割条件,若or前后只要有一个列没有索引,就都不会用索引

    2、为什么是最左匹配前缀原则?

    索引是有序的,多列索引是先按照第一列进行排序,然后在第一列排好序的基础上再对第二列排序,如果没有第一列的话,直接访问第二列,那第二列肯定是无序的,直接访问后面的列就用不到索引了。

    3、在最左匹配原则中,有如下说明:

    • 最左前缀匹配原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。
    • =和in可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优化成索引可以识别的形式

    4、MySQL执行过程、执行计划和优化

     

    (1) 客户端发送一条查询给服务器

    (2) 服务器会先检查查询缓存,如果命中了缓存,则立即返回。否则进入下一阶段

    (3) 服务器端进行SQL解析、预处理,然后再有查询优化器生成对应的执行计划。MySQL解析是对mysql的语法规则进行验证,预处理器是根据mysql的一些规则进行进一步的检查解析树是否合法,主要是检查数据库表和数据列是否存在等。MySQl是基于成本的的优化器,它将尝试预测一个查询使用某种执行计划的成本,并选择其中成本最小的一个。

    (4) Mysql根据查询优化器生成的执行计划,调用存储引擎来执行查询,一般是innodb

    (5) 将查询结果返回给客户端

  • 相关阅读:
    523 vue组件化高级 插槽slot:slot基本使用,具名插槽,编译作用域,作用域插槽
    522 vue父子组件的访问方式: $children、$refs、$parent
    521 vue子组件向父组件传递数据
    520 vue父组件向子组件传递:props基本用法,props数据验证,props中的驼峰标识
    在 React 组件中使用 Refs 指南
    Flutter 代码开发规范
    Angular ZoneJS 原理
    vue中$refs, $emit, $on, $once, $off的使用
    详解Js加法运算符
    JavaScript 异常
  • 原文地址:https://www.cnblogs.com/tilamisu007/p/9636446.html
Copyright © 2020-2023  润新知