MySQL优化小技巧

MySQL是当下使用最为广泛的数据库产品,因此,能够熟练的使用它,是一个开发人员的必备技能。

联合索引的配置参考点

  • 字段作为查询条件中使用的频率(依据联合索引的最左匹配原则);

  • 索引选择性:基数/记录数,基数是指不重复的索引值(也称为基数,cardinality),索引的选择性越高则查询效率越高,唯一索引的选择性是1,是最好的索引选择性,性能也是最好的;

  • 常用的包含order by、group by等场景sql是否满足覆盖索引;

索引优化tips

  • where子语句与order by子句组合满足索引最左前缀要求时,也可以用于查询排序,比如:WHERE create_time = '2024-01-01 00:00:00' order by create_by desc。而索引第一列为范围查询的时候,不可用于查询排序,比如:create_time > '2024-01-01 00:00:00' order by create_by desccreate_time in('2024-01-01 00:00:00', '2024-01-02 00:00:00') order by create_by desc

SQL优化tips

  • 通过覆盖索引查询到主键,再根据主键去查询到其他字段的值的来优化limit翻页到靠后时非常慢(需要回表查询limit前的记录行)的问题。比如:select * from s_user inner join(select id from s_user where sex='M' order by age limit 100000, 10) as s

  • 联合索引中的多个字段”范围查询”的时候,可用通过in某一个字段的所有值来实现“等值查询”。比如:select * from s_user where age in (1,2,3,4,5,6) and score > 90

  • 切分执行,如果一个范围的数据库操作(查询、删除等),切分为多个小操作;比如:可用将删除100w的SQL切分为100条单词删除1w条的sql,来避免锁住过多的数据、耗尽系统资源;

Comment