这周在做项目的时候,发现有些Sql语句写的复杂,一个复杂的Sql语句不仅性能比较低下,当涉及到重构的时候也是不容易理解和读懂的,并且一个复杂的sql语句会显著增加程序的耦合度,所以Sql语句的优化就显的很必要了。
Sql语句复杂化的原因
首先列举一下Sql语句复杂化的原因:
- 将业务逻辑由Sql语句实现
- 数据库表的设计不符合第三范式
- Sql语句中含有大量冗余的不必要逻辑
- 没有很好的利用视图
如何优化Sql语句呢
-
不要超过5个表以上的连接
超过5张表以上的连接会大大增加sql引擎的消耗。 -
考虑使用临时表或表变量存放中间结果
这样做可以使得代码逻辑更加清晰 -
少用子查询
-
善用视图,但应该注意视图嵌套不要过深
-
可以使用order by limit组合,同时在order by 后面使用索引,效率更高。
-
少使用select * 进行全表查询
减少工作量的一个简单方法是限制每个这个查询所检索出来的信息,select * 会检索存储在数据库表中的所有可用信息。对于具有多个字段和行的大型表,使用SELECT*语句可能会检索大量不必要的数据,导致大量的资源消耗殆尽。 -
避免使用select distinct语句
虽然我们一般都使用select distinct 去删除重复数据,但它降低了sql的运行和处理能力。为了避免降低查询的性能,可以选择更多字段来生成唯一的结果。 -
不要使用have 去过滤数据,而是应该使用where 去过滤数据
sql调优的主要目标