【MySQL优化】01 概述及索引

目录


1. 基本概念

1.1. 参考资料

参考:

  1. MySQL高性能优化规范建议  --JavaGuide
  2. SQL优化30条
  3. sql语句优化的30种方法

1.2. 总体优化建议

  1. MySQL 高级

1.3. hint相关

  1. mysql常用的hint(原创)

2. 索引优化

2.1. 基本概念

  1. 聚集索引(主键索引):

    1. 聚集索引就是按照每张表的主键构造一颗B+树,同时叶子节点中存放的即为整张表的记数据。
    2. 聚集索引的叶子节点称为数据页,聚集索引的这个特性决定了索引组织表中的数据也是索引的一部分。
  2. 辅助索引(二级索引):
    非主键索引,叶子节点=键值+书签。Innodb存储引擎的书签就是相应行数据的主键索引值。

  3. 覆盖索引:

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

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

    3. 解释三:是非聚集组合索引的一种形式,它包括在查询里的Select、Join和Where子句用到的所有列(即建立索引的字段正好是覆盖查询语句[select子句]与查询条件[Where子句]中所涉及的字段,也即,索引包含了查询正在查找的所有数据)。
      注意:
        不是所有类型的索引都可以成为覆盖索引。覆盖索引必须要存储索引的列,而哈希索引、空间索引和全文索引等都不存储索引列的值,所以MySQL只能使用B-Tree索引做覆盖索引

参考:

  1. mysql-覆盖索引
    –索引的优化, 有具体实例;

2.2. 索引优化

  1. 口诀
    全值匹配我最爱,最左前缀要遵守;
    带头大哥不能死,中间兄弟不能断;
    索引列上少计算,范围之后全失效;
    LIKE百分写最右,覆盖索引不写星;
    不等空值还有or,索引失效要少用;
    VAR引号不可丢,SQL高级也不难!
    –参考: MySQL 高级

2.3. 虚拟列

  1. Generated Column

在MySQL 5.7中,支持两种Generated Column,即Virtual Generated Column和Stored Generated Column,前者只将Generated Column保存在数据字典中(表的元数据),并不会将这一列数据持久化到磁盘上;后者会将Generated Column持久化到磁盘上,而不是每次读取的时候计算所得。很明显,后者存放了可以通过已有数据计算而得的数据,需要更多的磁盘空间,与Virtual Column相比并没有优势,因此,MySQL 5.7中,不指定Generated Column的类型,默认是Virtual Column。

如果需要Stored Generated Golumn的话,可能在Virtual Generated Column上建立索引更加合适

综上,一般情况下,都使用Virtual Generated Column,这也是MySQL默认的方式

参考:

  1. MySQL 5.7 虚拟列 (virtual columns)
  2. SQL优化改写之美——MySQL虚拟列、伪列实现对SQL的优化

3. 其他

3.1. 外键与级联

3.2. 通配符

% _

原因: 所花费的时间长;
2. 使用建议

  1. 不要过度使用 通配符 ;
  2. 不可在 开头 使用;
  3. 注意 通配符 放置的位置;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值