针对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的单位就行,并且数据增长后消耗是加法而不是乘法.



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




你可能感兴趣的:(针对SQL语句联表查询深入优化)