zoukankan      html  css  js  c++  java
  • 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) 将查询结果返回给客户端

  • 相关阅读:
    JAVA访问权限控制[zhuan]
    Netstat简介
    查看cpu性能和磁盘空间
    简单linux查询
    linux 三剑客命令(grep,sed ,awk)
    同步、异步的使用场景及好处
    AJAX中同步和异步的区别和使用场景
    在SpringBoot中用SpringAOP实现日志记录功能
    springboot使用@Aspect实现AOP记录日志讲解
    Spring:获取容器中的Bean
  • 原文地址:https://www.cnblogs.com/tilamisu007/p/9636446.html
Copyright © 2011-2022 走看看