你好所有下面的查詢是非常慢我似乎無法優化它。Mysql組中的隨機項目組
我試過兩種方法。兩者都非常緩慢。
我需要從每個image_tag中獲取一個隨機項目以及屬於某個標籤的圖像數量。任何建議將不勝感激。詢問兩分鐘執行任何一種方式。相對於圖像數量和連接速度較慢。圖像本身非常快。加入時很慢。
SELECT T.id, T.title, T.guid_id, T.hits, al.title, tt.title, tt.raw, it.tag_title_id
,((ACOS(SIN(53.38946 * PI()/180) * SIN(geo.latitude * PI()/180) + COS(53.38946 * PI()/180)
* COS(geo.latitude * PI()/180) * COS((-2.599586 - geo.longitude) * PI()/180)) * 180/PI()) * 60 * 1.1515)
AS distance, uf.real_name, uf.user_name, itx.image_count
FROM
(SELECT imx.id, imx.guid_id, imx.user_id, imx.approved, imx.hits, imx.title, imx.visible, imx.geolocation_id, imx.advertise_to
FROM image imx
ORDER BY floor(RAND()*(SELECT count(1) FROM image)))
AS T
INNER JOIN image_tag it ON T.id = it.image_id
INNER JOIN tag_title tt ON it.tag_title_id =tt.id
INNER JOIN album_image ai ON T.id = ai.image_id
INNER JOIN album al ON ai.album_id = al.id
INNER JOIN user us ON T.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
LEFT JOIN geolocation geo ON T.geolocation_id = geo.id
LEFT JOIN (SELECT image_id, count(*) as image_count FROM image_tag GROUP BY image_id) itx ON itx.image_id = T.id
WHERE T.visible = in_image_visible
AND T.approved = in_image_approved
AND (T.advertise_to <= in_date_time_now OR T.advertise_to IS NULL)
GROUP BY tt.id;
這是快速
SELECT * FROM (SELECT image_id, count(*) as image_count
FROM image_tag it
GROUP BY image_id) T
INNER JOIN image im ON T.image_id = im.id
當我添加的加入是非常緩慢的
當您移除該三角函數時發生了什麼性能? – Dancrumb
非常緩慢的三角學沒有性能影響它 –
你可以通過'EXPLAIN'運行這個並提供結果嗎? – Dancrumb