groupby多个字段性能_SQL 性能优化

本文探讨了SQL性能优化中的关键点,包括使用EXISTS替代IN提高查询效率,避免不必要的排序,有效利用索引,以及减少中间表的使用。通过实例解释了如何优化GROUP BY语句,以及在使用LIKE、OR和NULL时的注意事项,旨在提升SQL查询性能。
摘要由CSDN通过智能技术生成

06954a0d4eda081772f28de40696340c.png

SQL 的性能优化是数据库工程师在实际工作中必须面对的课题之一。对于某些数据库工程师来说,它几乎是唯一的课题。实际上,在像 Web 服务这样需要快速响应的应用场景中,SQL 的性能直接决定了系统是否可以使用。在 SQL 中,很多时候不同代码能够得出相同结果。从理论上来说,得到相同结果的不同代码应该有相同的性能,但遗憾的是,查询优化器生成的执行计划很大程度上要受到代码外部结构的影响。因此如果想优化查询性能,必须知道如何写代码才能使优化器的执行效率更高。

一、使用高效查询

1.1 参数是子查询时,使用 EXISTS 代替 IN

在大多时候,[NOT] IN 和 [NOT] EXISTS 返回的结果是相同的。但是两者用于子查询时,EXISTS 的速度会更快一些。

如下两张表中包含了选课程 A 和课程 B 的学生。

15b35da0bd3f56a8a4231cc467cf0b9a.png
Table: class_A

cbb1850e39d8a1e233d78e72c74d2dab.png
Table: class_B

从 class_A 表中找出同时选了课程 B 的学生。

-- slow

使用 EXISTS 时更快的原因有以下两个。

  • 如果连接列 (id) 上建立了索引,那么查询 class_B 时不用查实际的表,只需查索引就可以了。
  • 如果使用EXISTS,那么只要查到一行数据满足条件就会终止查询,不用像使用 IN 时一样扫描全表。在这一点上 NOT EXISTS 也一样。

当 IN 的参数是子查询时,数据库首先会执行子查询,然后将结果存储在一张临时的工作表里(内联视图),然后扫描整个视图

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值