作者carlcarl (carl)
看板PHP
标题Re: [请益] 用PHP做运算 还是用MYSQL做运算 ?
时间Mon Nov 5 21:08:00 2012
是说之前有遇过一个实际发生的问题
SELECT xxx FROM table WHERE XXX IN (SELECT MAX(yyy) FROM table2 WHERE iii=jjj)
看起来好像也没啥问题 用explain下去跑才发现扫了很多行
後来把IN改成= 用explain下去看就会发现 MySQL帮你把这段作optimize了
一开始写直觉也是应该用=啦
我不知道为什麽当初的人会用IN来写...orz
※ 引述《DarkKiller (System hacked)》之铭言:
: http://www.mysqlperformanceblog.com/2010/10/25/mysql-limitations-part-3-subqueries/
: 补一下 IN (subquery) 的效能问题,这是 MySQL issue。
: 你以为 SELECT * FROM a WHERE col IN (SELECT ...) 会先跑 (SELECT ...) 里面
: 的东西,然後再给 IN 用。
: 但 MySQL 一开始就会把 (SELECT ...) 里面的东西改写成 JOIN 语法,而这在某些
: 情况下会导致效能变差... (因为你已经预期 SELECT 出来的东西不多)
: 这刚好是个把计算搬到 PHP 端处理的范例... (对 MySQL bug workaround)
: ※ 引述《DarkKiller (System hacked)》之铭言:
: : 然後这边有一个 SQL issue (maybe MySQL only),如果你把 subquery 拆出来自己做
: : 就会很快:
: : SELECT SQL_NO_CACHE question_id, gender, COUNT(*)
: : FROM answer
: : WHERE question_id IN (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20)
: : GROUP BY question_id, gender;
: : 速度是:
: : 40 rows in set (1.09 sec)
: : 这样能解答你的问题吗?XDDD
--
http://blog.carlcarl.tw
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 111.242.49.235
1F:→ carlcarl:中间其实还有改成分成两个query来作 後来发现直接用=就好 11/05 21:08
2F:→ carlcarl:就用这个版本了 11/05 21:08