是否可以將以下內容優化爲單個查詢?PHP:如何在單個查詢中優化這些MySQL查詢?
我在這裏假設一個查詢會更有效,多個查詢使用臨時表,所以請讓我知道如果我的假設是不正確的。
$id
是當前memberid。 $list
是要從最終結果中刪除的itemid列表(例如已下載的項目)。
這個查詢應該做什麼查找已經下載了與$id
成員類似項目的前500名成員。然後找到這些成員已下載的所有項目,並根據每個成員的類似下載數量和每個項目的總下載次數進行排名。因此最終結果是$id
成員的建議清單。
的查詢是:
mysql_query('CREATE TEMPORARY TABLE temp1 ENGINE=MEMORY AS
(SELECT a.memberid, COUNT(*) `score` FROM table_downloads a INNER JOIN
(SELECT itemid FROM table_downloads WHERE memberid='.$id.') b ON a.itemid = b.itemid
WHERE a.memberid!='.$id.' GROUP BY a.memberid HAVING score>0 ORDER BY score DESC LIMIT 500)');
$res=mysql_query('SELECT table_downloads.itemid,COUNT(table_downloads.itemid*temp1.score) AS score2
FROM table_downloads,temp1
WHERE table_downloads.memberid=temp1.memberid AND table_downloads.itemid NOT IN ('.$list.')
GROUP BY table_downloads.itemid
ORDER BY score2 DESC LIMIT 30');
mysql_query('DROP TABLE temp1');
這是可能的,這種查詢可能要花很長時間爲不可用,如果有幾百萬行。任何建議,以確保它很快執行也將不勝感激。
* 我正在故意使用mysql_query。請不要告訴我使用的mysqli。*
可以隨時加入琴絃,用分號隔開(',')。 – 2013-04-10 11:22:27
「我假設在這裏單個查詢會更有效,多個查詢使用臨時表」---你爲什麼這麼認爲?嘗試用剪刀剪下整本書。然後嘗試一個又一個的單頁。哪個會更有效率? – zerkms 2013-04-10 11:23:20
如果你的查詢是可讀的,那真的會有幫助;) – 2013-04-10 11:24:08