0
如果有人可以幫我解決這個問題,你會很棒。優化mysql映像計數和隨機
基本上一張圖片屬於一張專輯。
我正在運行的查詢非常慢,我可以做一些優化建議。
查詢的緩慢部分是(從album_image其中album_image.album_id = al.id的SELECT count(*))作爲image_count,所以任何關於優化的建議都會很好。我已經使用Explain擴展到在這裏找到問題。我需要選擇一個隨機的guid id,這是每張專輯中的隨機圖像,因此是內部連接。我讀通過RAND()不是很好,但我不能確定這是否是因爲它的每一行執行一次查詢的那部分是緩慢的,從每一張專輯
SELECT al.id, al.alias_title, al.title, al.hits, al.created_on, uf.real_name, uf.user_name, T.guid_id,
(SELECT count(*) from album_image where album_image.album_id = al.id) as image_count
FROM album al
INNER JOIN (SELECT imx.id, aix.album_id, imx.guid_id FROM image imx
INNER JOIN album_image aix ON imx.id = aix.image_id
ORDER BY floor(RAND()*(SELECT count(1) FROM image))) AS T ON al.id = T.album_id
INNER JOIN user us ON al.user_id = us.id
LEFT JOIN user_flickr uf ON us.flickr_id = uf.id
LEFT JOIN user_site uss ON us.user_site_id= uss.id
WHERE al.approved = 'Yes' AND al.visible ='1'
GROUP BY T.album_id;
您正在使用InnoDB,我猜想。如果是的話,InnoDB count()的速度非常慢,因爲它會掃描所有的表。您可以嘗試使用MyISAM作爲該表,或者簡單地計算一次,存儲它,然後在不重新計算count()的情況下使用它。看看這裏http://www.mysqlperformanceblog.com/2006/12/01/count-for-innodb-tables/ – gpicchiarelli