查询优化:SQL优化,关于连多表查询

本文探讨了在多表关联查询场景下,如何通过使用子查询优化SQL查询,提高响应速度。子查询可有效限制目标记录数,缩小查询范围,实现快速查询。通过对比子查询与非子查询的效率,总结出子查询在多表关联查询中具有明显优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查询优化:SQL优化

 场景:当列表展示的数据来自很多表中的数据时,由于需要实现相关的查询条件,WHERE涉及到每张表时,需要用JOIN连接查询出相关数据(比如查询采购单数据:有采购单、采购单明细、入库数据、报损数据、取消数据、请款数据、采购合同、产品信息等等),JOIN连接查询也很方便地获取到要返回的数据,但是问题来了,这么多表查询起来关联的数据非常多,查询耗时很大,甚至超过30秒,影响用户体验,那么怎样查询加快响应速度是需要考虑的问题。

SQL优化方向:几点考虑,如下

  • 子查询:有查询条件时才关联相关表拼接成子查询
  • 当连表查询比较多时,通过子查询限制目标记录数,缩小查询范围
  • 查询汇总数据可分开查询做异步查询,同时设置缓存
  • 主查询用来展示数据;子查询限定查询范围,加快响应速度

分析:主查询如果不限定目标记录,则会关联所有表查询出目标数据,关联越多查询越慢;子查询查询条件较少,不用关联那么多表,查询出数据再限定主查询在子查询的结果集中查找数据(比如一般子查询按分页查询50条数据,那么主查询就是查找这50条数据),这样速度就相当于子查询的响应速度;

 

用子查询与非子查询的比较:

查询条件越少,用子查询效率越高,甚至快于非子查询几十倍;随着查询条件的增多(假设所有WHERE都用上),用子查询的效率就越接近非子查询,但是这种场景非常少,而且满足所有条件的数据也非常少,所以效率也是非常快的。

总结:使用子查询在多表关联查询的情况下有较大优势,主查询获取WEB页面需要展示的数据,子查询匹配目标记录数,两者结合起来可以实现不错的优化效果。

 

有不对的,或更好的、其他的方案,欢迎来信 ^v^

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值