안녕하세요. 아래 쿼리는 모두 매우 느리므로 최적화 할 수 없습니다.Mysql 그룹의 임의 항목 및 그룹의 항목 수를 계산하십시오.
두 가지 방법을 시도했습니다. 둘 다 매우 천천히.
각 image_tag에서 임의의 항목을 가져와야하며 태그에 속한 이미지의 양도 가져와야합니다. 모든 조언을 크게 주시면 감사하겠습니다. 어느 쪽이든 실행하려면 2 분이 걸리는 쿼리. 이미지 수 및 조인과 관련하여 천천히. 이미지 자체가 매우 빠르게 계산됩니다. 참여가 매우 느릴 때.
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
매우 느리게 여전히 삼각법에 성능 영향이 없음 –
이것을 '실행'을 통해 실행하고 결과를 제공 할 수 있습니까? – Dancrumb