Re: [請益] 用PHP做運算 還是用MYSQL做運算 ?

看板PHP作者 (carl)時間11年前 (2012/11/05 21:08), 編輯推噓0(002)
留言2則, 1人參與, 最新討論串12/12 (看更多)
是說之前有遇過一個實際發生的問題 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

11/05 21:08, , 1F
中間其實還有改成分成兩個query來作 後來發現直接用=就好
11/05 21:08, 1F

11/05 21:08, , 2F
就用這個版本了
11/05 21:08, 2F
文章代碼(AID): #1Gbxeqo- (PHP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 12 之 12 篇):
文章代碼(AID): #1Gbxeqo- (PHP)