2012-12-21 2 views
0

JOINED 테이블에서 파생 된 ORDER BY를 추가하면 쿼리를 실행하는 데 걸리는 시간이 0.008 초에서 0.50 초로 늘어납니다.주문 시간 on join 날짜가

SELECT a.productid 
FROM products a 
    JOIN products_lng b FORCE INDEX (primary) 
    ON a.productid = b.productid 
     AND b.code = 'US' 
    JOIN pricing c 
    ON c.productid = a.productid 
    JOIN thumbnails d 
    ON d.productid = a.productid 
    JOIN bigthumbnails e 
    ON e.productid = a.productid 
    JOIN products_categories f 
    ON f.productid = a.productid 
WHERE a.forsale = 'Y' 
GROUP BY b.productid 
ORDER BY b.product 

설명 계획 :이 조합 있다는 것으로 나타나 결국

enter image description here

CREATE TABLE `products_lng` (
`code` varchar(2) CHARACTER SET latin1 NOT NULL DEFAULT '', 
`productid` int(11) NOT NULL DEFAULT '0', 
`product` varchar(255) CHARACTER SET latin1 NOT NULL DEFAULT '', 
`descr` varchar(512) CHARACTER SET latin1 NOT NULL, 
`full_descr` varchar(1024) CHARACTER SET latin1 NOT NULL, 
`processed` varchar(1) CHARACTER SET latin1 NOT NULL, 
PRIMARY KEY (`code`,`productid`,`product`), 
KEY `ad` (`code`,`productid`,`product`,`descr`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin 
+2

이것은 MySQL이 기본 키를 이미 사용했기 때문에 다른 인덱스를 사용하지 않기 때문에 발생합니다. –

+0

"PRIMARY"색인에 "product"필드를 추가하면 더 많은 시간이 걸립니다. – bicycle

+0

사실, 왜 'a'테이블을 사용하고 있습니까? 너는 필요 없어. –

답변

0

: enter image description here

B가 다음 인덱스 다음은 쿼리입니다 ORDER BY와 GROUP BY는 질의 실행이 평상시보다 오래 걸리는 이유입니다. 쿼리를 하위 쿼리에 배치하고 ORDER BY와 GROUP BY를 분리하면 원래 0.5 초 대신 0.0015 초로 실행 시간을 크게 제한 할 수있었습니다. 여전히 요구 사항을 조정해야하지만 다음과 같이 표시되어야합니다. 기본적으로 하위 쿼리에서 WHERE 매개 변수와 주변 쿼리를 정의하고 그 값을 선택하려고합니다.

SELECT z.*,d.*,e.* 
FROM products_lng z 
JOIN thumbnails d ON d.productid = z.productid 
JOIN bigthumbnails e ON e.productid = z.productid 
WHERE EXISTS 
    (SELECT b.productid 
    FROM products b 
    JOIN pricing c ON c.productid = b.productid 
    JOIN products_lng i USE INDEX (PRIMARY) ON i.productid = b.productid 
    AND i.code = 'US' 
    JOIN products_categories f ON f.productid = b.productid 
    WHERE b.productid = z.productid 
    GROUP BY b.productid) 
ORDER BY z.product