容我装个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的单位就行,并且数据增长后消耗是加法而不是乘法.
如果有不足请指出,都可以讨论讨论