2010-11-27 7 views
1

필자는 잠시 동안이 문제로 어려움을 겪어 왔습니다. 12 초 이상 걸리며 그 이유를 알아낼 수 없습니다. 세 테이블 모두가 가운을 입는 것처럼 느려집니다.매우 느린 mysql SELECT 쿼리

SELECT SUM(quantity), rprice, media_file, url, title 
FROM inventory, ndxz_objects, ndxz_media 
WHERE productid = ndxz_objects.id 
AND media_ref_id = ndxz_objects.id 
AND productid = media_ref_id 
AND media_order = (SELECT MIN(media_order) FROM ndxz_media WHERE media_ref_id = ndxz_objects.id) 
GROUP BY productid 
ORDER BY productid DESC 

Theres는 난 당신이 또한 최소한에, ndxz_media.media_ref_id에 인덱스를 필요로 추측하고있어 ndxz_objects.id 인덱스 및 productid

+0

가 (.. your_query_here ..) 무엇을 설명 않습니다 GROUP BY 절에서 실제로 유효하지 않지만라고? 어쩌면 여기에 붙여 넣어 성능이 향상되는 곳을 더 잘 알 수 있습니다. – Jaime

답변

1

각 media_ref_id = ndxz_objects.id

당신은 또한 내가

media_ref_id에와 ndxz_media 테이블에 media_order에 인덱스를 생성해야

+0

많은 도움이되는 색인이 0.0022, 재미 있습니다. – jackjlgregory

0

입니다. (나는 당신이 컬럼 이름을 매우 명확하게 범위 지정하지 않기 때문에 media_ref_id 컬럼이 어디서 왔는지 추측하고있다.)

동일한 인덱스는 아마도 두 번째 컬럼으로 media_order를 포함해야한다.

테이블 스캔이 필요하기 때문에 침체가 중첩 된 쿼리로 인해 발생
0

문제는 대부분 correlated 하위 쿼리입니다.이 쿼리는 인덱스가 있어도 행별로 한 번 실행되므로 위 쿼리는 좋지 않습니다. 나는 아래가 동일한 결과를 달성해야한다고 생각한다.

SELECT SUM(quantity), rprice, media_file, url, title 
FROM inventory, ndxz_objects, ndxz_media, 
(SELECT MIN(media_order) as order FROM ndxz_media GROUP BY media_ref_id) min_orders 
WHERE productid = ndxz_objects.id 
AND media_ref_id = ndxz_objects.id 
AND productid = media_ref_id 
AND media_order = min_orders.order 
GROUP BY productid 
ORDER BY productid DESC 

사용자가 제공 한 쿼리 어쨌든 rprice, media_file, url, title 이후 집계되지 않거나

+0

은 rprice, media_file, url, title을 group by clause help에 포함 시키시겠습니까? – jackjlgregory