作者Prestense (____高手)
看板Database
标题[讨论] 资料表Join的效能差异
时间Wed May 28 15:45:50 2014
各位大大好:
假设2个资料表A和资料表B的资料量都很大(就假设都100万笔好了)
那在做Join的时候一定会非常耗时和耗资源
一般我们在下查询时普遍都会这样写
SELECT A.name B.salary FROM A LEFT JOIN B on A.id = B.id WHERE A.age >='20';
那如果先将A资料表查询完成
SELECT name, id FROM A WHERE age >= '20';
再以程式回圈方式查询B资料表(假设A资料表查询完有20笔,那B资料表就要查询20次)
SELECT salary FROM B WHERE id='A.id'; //A.id是上面A资料表查询出来的栏位资料
最後再把2个资料合并起来(这里有点偏程式端了)
效能会比较快吗?
在此先感谢各位!!!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.133.223.105
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Database/M.1401263152.A.530.html
1F:推 rockchangnew:善用索引,资料库没那麽差。 05/30 19:44
我的资料库中有设索引呢,不过还是慢慢的...也有可能是Server不太给力啦
2F:推 popcorny:基本上资料库系统也像是你这麽做,先过滤再join 05/31 15:29
3F:→ popcorny:你可以用explain先看看他怎麽做query得 05/31 15:29
okay!我等等就试看看!
4F:→ bohei:yeah 可运用temp table 05/31 22:42
Temp table好像要进网页後才执行,我的首页也是因为Query很慢所以第一次会等很久...
所以才在找看看有没有方法提高Query的效能
※ 编辑: Prestense (220.133.223.105), 06/03/2014 10:37:50
5F:→ iFEELing:temp table 也可以想成 资料异动不大的话 乾脆就批次算 06/05 01:21
6F:→ iFEELing:重点是 为什麽会耗时跟耗资源? 资料库是怎麽进行的? 06/05 01:28
7F:→ iFEELing:想想看 . 执行计画, join演算法,暂存空间, 资料集大小... 06/05 01:30
8F:→ iFEELing:看看可能的瓶颈在什麽地方 06/05 01:30