调优秘籍:MySQL系列(一)

介绍

MySQL是最流行的关系型数据库管理系统之一,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品

目前很多大小公司都在使用MySQL,当数据量变大时,往往之前运行良好的MySQL语句就会变得越来越慢

所以,针对MySQL的优化是必不可少的

调优秘籍

1. 理解Count (*) 和 Count(1) 以及 Count(column) 的区别

  • 执行效果 —— 通常来说,count(*) 和 count(1) 的效果基本一样,会包含字段为null的记录,而count(column)则不会包含字段为null的记录
  • 执行效率 —— 字段是否为主键以及表中是否只有一个字段等等因素都会影响执行速度。更多请参见下方的参考链接

2. 避免使用select(*)

应该按需查询以避免额外的性能消耗

3. 建立高性能的索引

  1. 为经常需要排序、分组和联合操作的字段建立索引 —— 排序操作非常耗时
  2. 选择唯一性索引 —— 字段相同会影响查询速度
  3. 为经常作为查询条件的字段建立索引
  4. 限制索引的数目 —— 索引并不是越多越好。索引都需要占用磁盘空间,并且修改表时,对索引的更新比较麻烦
  5. 建立索引的字段避免长度过长

4. 选择合适的引擎

以Innodb 和 MyISAM为例,它们的区别如下

Innodb —— 支持事务、外键,索引和数据不分离,适合较高的并发,数据更新频繁且数据一致性要求高的场景

MyISAM —— 不支持事务、外键,索引和数据分离,适合较低的并发,数据查询频繁且数据一致性要求低的场景

综上,如果是读多写少且数据一致性要求低的场景,则建议使用MyISAM。例如知泥博客这样的个人博客

5. 使用Explain

Explain语句可以帮助你更好地了解SQL语句的执行计划、走不走索引等信息。这样你就能对SQL语句进行更有针对性地优

explain

由于之前在 type 字段建立了 idx_type 索引,而此处又是对type的简单查询。所以使用explain可以看到key 那一列已经用到了该索引

6. 避免索引失效

  1. 避免在索引字段上进行任何操作(计算、函数、类型转换等)
  2. 避免使用 like '%_'  百分号在前面
  3. 避免使用  != 和 <>
  4. 使用 or 关键字时,需要前后两个条件中的字段都建立了索引才会走索引
  5. 尽量遵守最左前缀原则

小结

MySQL的优化体现在方方面面,后续会更新其他调优技巧

参考

count(1)、count(*)与count(列名)的执行区别

高性能MySQL——Count(1) OR Count(*)?

 

评论或私信站长


  1. #该文章暂时没有评论