针对SQL语句联表查询深入优化

容我装个B,用深入这个词

本文章只涉及到SQL语句优化,未涉及框架注意哈



先解释原理,自己总结的如果不对可以指出:

这是一个查询指定用户订单扩展信息的例子

联表查询对于数据库性能的损耗是呈倍数增长

如orders, orders_details 表各有1000条数据

单独查询一个表时,我们算1000个单位的性能消耗

当2个表联表查询是就是1000*1000,性能消耗就是100W


查询中需要从多个表获取数据,如果无优化如:

select  * from orders,orders_details 
where orders.id=orders_details.order_id and user_id =123

这是一个普通的联表查询,性能消耗100W单位,并且随着数据量的增长,性能消耗成倍增长,

以下是优化语句

一般优化:先进行过滤在进行,进行查询

select  * from

(select  orders_id from orders where user_id =123)orders,

orders_detailswhere orders.id= orders_details.order_id

这样先赛选方法还是有缺陷,虽然性能消耗并没有那么恐怖了,但是正常还是有几十* (st_orders_details)行总和的消耗,


我现在使用的优化方案

select *from orders_details where order_id in (select id from orders where user_id=123)


这种方式只需要全表扫描一次就成功,按照上面的性能消耗说法,基本只需要消耗1000的单位就行,并且数据增长后消耗是加法而不是乘法.



如果有不足请指出,都可以讨论讨论




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值