美文网首页
mysql优化

mysql优化

作者: happy1991 | 来源:发表于2020-04-20 17:11 被阅读0次

    1.找到问题,哪里特变慢

    2、最简单的优化方式,让性能翻倍

    3.解析阿里规范让性能翻倍

    4.通过索引让新能飙升(这里有深坑)

    5.解决神坑,终极杀器-执行计划

    机器执行顺序

    执行计划explain type system>const>eq_ref>ref>range>index>all最好到最差依旧是

    左连接时,右表加索引。反过来也一样,也相反加索引。

    索引优化

    右边加%,会导致索引失效,如果必须加右边%才能查,可以用覆盖索引来解决这个问题

    什么叫做覆盖索引?

          在了解覆盖索引之前我们先大概了解一下什么是聚集索引(主键索引)和辅助索引(二级索引)

          聚集索引(主键索引):

              聚集索引就是按照每张表的主键构造一颗B+树,同时叶子节点中存放的即为整张表的记录数据。

              聚集索引的叶子节点称为数据页,聚集索引的这个特性决定了索引组织表中的数据也是索引的一部分。

          辅助索引(二级索引):

              非主键索引,叶子节点=键值+书签。Innodb存储引擎的书签就是相应行数据的主键索引值。

            再来看看什么是覆盖索引,有下面三种理解:

    解释一: 就是select的数据列只用从索引中就能够取得,不必从数据表中读取,换句话说查询列要被所使用的索引覆盖。

    解释二: 索引是高效找到行的一个方法,当能通过检索索引就可以读取想要的数据,那就不需要再到数据表中读取行了。如果一个索引包含了(或覆盖了)满足查询语句中字段与条件的数据就叫 做覆盖索引。

    解释三:是非聚集组合索引的一种形式,它包括在查询里的Select、Join和Where子句用到的所有列(即建立索引的字段正好是覆盖查询语句[select子句]与查询条件[Where子句]中所涉及的字段,也即,索引包含了查询正在查找的所有数据)。

      不是所有类型的索引都可以成为覆盖索引。覆盖索引必须要存储索引的列,而哈希索引、空间索引和全文索引等都不存储索引列的值,所以MySQL只能使用B-Tree索引做覆盖索引

      当发起一个被索引覆盖的查询(也叫作索引覆盖查询)时,在EXPLAIN的Extra列可以看到“Using index”的信息

          从执行结果上看,这个SQL语句只通过索引,就取到了所需要的数据,这个过程就叫做索引覆盖。

    相关文章

      网友评论

          本文标题:mysql优化

          本文链接:https://www.haomeiwen.com/subject/fbbyvhtx.html