单表多次查询和多表联合查询效果对比

单表多次查询和多表联合查询效果对比
1、耗时对比
在同等条件下,以用户、角色、及用户角色关联表为例。
对于单表查询:
SELECT * FROM `cims_v1.0`.user;   //耗时16ms
SELECT * FROM `cims_v1.0`.user_role ur where ur.user_id=2;  //耗时15ms
SELECT * FROM `cims_v1.0`.role rol where role_id=4;  //耗时0ms
总共耗时31ms;
对于多表联合查询:
SELECT 
us.username, us.user_id, ur.role_id, rol.role_name
FROM `cims_v1.0`.user us
LEFT JOIN `cims_v1.0`.user_role ur ON ur.user_id=us.user_id
LEFT JOIN `cims_v1.0`.role rol ON rol.role_id=ur.role_id;
WHERE us.user_id=2;
总共耗时375ms
结论:多表联合查询耗时是单表多次查询耗时的10倍以上。
2、分解关联查询的方式重构查询的优点
很多高性能的应用都会对关联查询进行分解,对每个表进行一次单表查询,然后将结果在应用程序中进行关联。
2.1. 让缓存的效率更高 
许多应用程序可以方便地缓存单表查询对应的结果对象。另外对于MySQL的查询缓存来说,如果关联中的某个表发生了变化,那么就无法使用查询缓存了,而拆分后,如果某个表很少改变,那么基于该表的查询就可以重复利用查询缓存结果了。
2.2. 减少锁的竞争
将查询分解后,执行单个查询可以减少锁的竞争。
2.3. 易于对数据库拆分和扩展
在应用层做关联,可以更容易对数据库进行拆分,更容易做到高性能和可扩展。
2.4. 提高查询效率
查询本身效率也可能会有所提升
3、分解关联查询的方式重构查询的缺点
原本一条查询,这里却变成了多条查询,返回结果又是一模一样。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大浪淘沙胡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值