SQL优化-总结《SQL进阶教程》


查询速度慢不止是因为SQL语句本身,还可能是因为内存分配不佳、文件结构不合理等其他原因。从理论上来说,得到相同结果的不同代码应该有相同的性能,但遗憾的是,查询优化器生成的执行计划很大程度上要受到代码外部结果的影响,因此需要优化代码查询性能,需要知道如何写代码才能使优化器的执行效率更高。

一、使用高效查询

1、EXISTS代替IN

[NOT]IN和[NOT]EXISTS返回结果相同,但是EXISTS的速度更快:如果使用EXISTS,那么只要查到一行数据满足条件就会停止查询,不用像IN时一样扫描全表,这一点上NOT EXISTS也一样。

2、参数是子查询的时,使用连接代替IN

因为没有使用子查询,因此没有中间表的生成,如果没有索引,那么可能EXISTS会略胜一筹。且关联一般用左边小数右边大数的结构去连接。

二、避免排序

数据库内部频繁进行着暗中的排序。会进行排序的语句有:GROUP BY、ORDER BY、聚合函数(SUM、COUNT、AVG、MAX、MIN)、DISTINCT、集合运算符(UNION、INTERSECT、EXCEPT)、窗口函数(RANK、RANK_DENSE、ROW_NUMBER)因此,需要避免(或减少)无谓的排序!

1、灵活使用集合运算符的ALL可选项

UNION、INTERSECT、EXCEPT三个集合,在默认的使用方式下,这些运算符会为了排除重复数据而进行排序,在不关注是否重复结果的时候可以添加ALL。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值