一、MySQL优化的重要性
实际项目中因慢查询、数据表设计问题,会导致系统性能下降、数据不一致、并发冲突等一系列难题。所以SQL优化非常重要,可以显著提升数据库系统的性能、响应速度和资源利用率,从而提供更好的用户体验和更高的系统可靠性。先了解下MySQL的执行过程:
二、MySQL优化策略细则详解
1、为WHERE及ORDER BY涉及的列建立索引
对查询进行优化,应该尽量避免全表扫描。所以首先应考虑在 WHERE 及 ORDER BY 涉及的列上建立索引。
2、在WHERE中使用默认值代替NULL
创建表时尽量不要使用NULL作默认值,可以使用0、-1作为默认值。因为在 !=、<>、is null、is not null等条件查询时,一般MySQL优化器会放弃走索引。
3、慎用 != 或 <> 操作符
应尽量避免在WHERE中使用 != 或 <> 操作符, 会导致全表扫描。MySQL只有对以下操作符才使用索引:<,<=,=,>,>=,BETWEEN,IN,以及某些时候的 LIKE。
4、慎用OR来连接条件
使用OR也可能会使索引失效,从而全表扫描。可以使用UNION合并查询代替:
select id from table_example where num=100
union all
select id from table_example where num=200
5、慎用IN和NOT IN
IN和NOT IN也会导致全表扫描。对于连续的数值,能用BETWEEN就不要用IN:select id from t where num between 100 and 200。
6、慎用左模糊LIKE '%…'
首页尽量避免模糊查询,如果必须使用,不采用全模糊查询,也应尽量采用右模糊查询,即like ‘…%’,是会使用索引的。左模糊like ‘%…’无法直接使用索引,但可以利用reverse + function index的形式,变化成 like ‘…%’。全模糊查询是无法优化的,一定要使用的话建议使用搜索引擎,比如 ElasticSearch。
7、注意索引并不是越多越好
索引可以提高相应的SELECT的效率,但同时也降低了INSERT及UPDATE的效率。一个表的索引数最好不要超过 6 个。所以要慎重考虑如何创建比较合适。
8、尽量使用数字型字段
因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。所以字符会降低查询和连接的性能,并会增加存储开销。
9、尽量使用varchar代替char
varchar变长字段按数据内容实际长度存储,存储空间小,可以节省存储空间。char按声明大小存储,不足补空格。其次对于查询来说,在一个相对较小的字段内搜索,效率更高。
10、尽量不要使用SELECT *,而是用具体字段
SELECT *的弊端很多:增加很多不必要的消耗,比如CPU、IO、内存、网络带宽。增加了使用覆盖索引的可能性;增加了回表的可能性;当表结构发生变化时,前端也需要更改;查询效率低;
11、连接多个表时尽量使用使用表的别名(Alias)
当在 SQL 语句中连接多个表时,请使用表的别名并把别名前缀于每个 Column 上。这样一来,就可以减少解析的时间并减少那些由 Column 歧义引起的语法错误。
12、使用临时表暂存中间结果
优化MySQL语句的重要方法就是采用临时表暂存中间结果。但是临时表的好处远远不止这些,将临时结果暂存在临时表,后面的查询就在临时表中了,这可以避免程序中多次扫描主表,也大大减少了程序执行中“共享锁”阻塞“更新锁”,减少了阻塞,提高了并发性能。
13、表连接不宜过多
表连接(JOIN)不要超过 5 个。视图嵌套不要过深,一般视图嵌套不要超过 2 个为宜。
14、将需要查询的结果预先计算好
某些情况下,将需要查询的结果预先计算好放在表中,查询的时候再Select,而不是查询的时候进行计算。
三、MySQL数据库设计规范
严格遵循一定的设计规范,可以有效避免MySQL数据库过程中的诸多问题,从而到达软件运行更加的稳定、健壮。以下是我的MySQL数据库设计规范,可以点击查看,供参考。