单表多次查询和多表联合查询效果对比
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、分解关联查询的方式重构查询的缺点
原本一条查询,这里却变成了多条查询,返回结果又是一模一样。
单表多次查询和多表联合查询效果对比
最新推荐文章于 2024-05-30 11:28:09 发布