두 개의 news, news_view 테이블이 있습니다. 기사를 볼 때마다 뉴스 ID, IP 주소 및 날짜가 news_views에 기록됩니다.이 MySQL 하위 쿼리를 최적화 할 수 있습니까?
나는 하위 쿼리가있는 쿼리를 사용하여 뉴스에서 가장 많이 본 제목을 가져 오는데, 각각에 대해 최근 24 시간 동안보기의 총 개수를 가져옵니다.
news_views에 수십만 개의 행이 있고 완료되기 전에 전체 테이블을 거쳐야하기 때문에 실행하는 데 5-10 초가 걸리는 것을 제외하고는 정상적으로 작동합니다. 쿼리는 다음과 같이 개선 될 수있는 방법이 있습니까?
SELECT n.title
, nv.views
FROM news n
LEFT
JOIN (
SELECT news_id
, count(DISTINCT ip) AS views
FROM news_views
WHERE datetime >= SUBDATE(now(), INTERVAL 24 HOUR)
GROUP
BY news_id
) AS nv
ON nv.news_id = n.id
ORDER
BY views DESC
LIMIT 15
테이블에 어떤 색인이 있습니까? –
없음, 어떤 제안? – Dan