SQL优化的一些思路

一、从使用上索引考虑。

1、为查询过滤、连接、group by,order by等字段建立索引。group by 和 order by 尽量设置为主表字段,且不能跨表。

2、模糊查询前缀不能有%,或者为模糊查询的所有字段加联合索引,走覆盖索引

3、OR改为union all

4、少用not in、<>、is null 、is not null、not exist。这里不是说一定不走索引,只是概率小,如果可以字段都设置为非空。

5、索引列不能为计算函数且索引列数据类型不能被隐式转换。

二、从查询功能上考虑

1、尽量少嵌套,尤其是嵌套后面还有where条件的,这样查询生成的临时表没有索引,再次过滤导致查询慢。

2、子查询改为连接查询,对于有group by 的子查询,如果查询结果和子查询是一对多的关系,可改为连接后,把group by 放在最后。如果查询结果和子查询是多对一,或者多对多,可以考虑拆为两个查询,在应用上做连接。where带子查询没转为连接的,要把子查询放在小表上,where条件子查询会遍历表的每一行。

3、有多表关联的,不是查全部数据,尤其是带有分页功能的,可以根据过滤条件先查出主表的部分主键做where条件,然后再和其他表做关联。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值