값이 내림차순으로 정렬 된 카테고리의 제품을 출력하는 아주 간단한 MySQL 쿼리가 있습니다.인덱스를 사용하기 위해 mysql 내부 조인 쿼리를 최적화하십시오.
SELECT
p.id_product, p.price
FROM product p
INNER JOIN product_category pc
ON (pc.id_product = p.id_product AND pc.id_category=1234)
GROUP BY pc.id_product
ORDER BY p.price DESC
내가 "PRODUCT_CATEGORY"테이블에서 "제품"테이블에서 제품을 많이보다 제품 카테고리 관계를 가지고 있기 때문에이 쿼리는 영원히 지속됩니다. 내가 정의 인덱스/기본 키 다음 한
:
- 테이블 "제품"- 기본 키 (id_product)
- 테이블 "PRODUCT_CATEGORY"- 기본 키 (id_product, id_category), 지수 (id_product) 지수 (id_category)
하지만이 쿼리를 설명 할 때 얻을 :
+----+-------------+-------+--------+--------------------+------------+---------+------------------------+-------+----------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+--------+--------------------+------------+---------+------------------------+-------+----------------------------------------------+
| 1 | SIMPLE | pc | index | PRIMARY,id_product | id_product | 4 | NULL | 73779 | Using index; Using temporary; Using filesort |
| 1 | SIMPLE | p | eq_ref | PRIMARY | PRIMARY | 4 | mydb.pc.id_product | 1 | |
+----+-------------+-------+--------+--------------------+------------+---------+------------------------+-------+----------------------------------------------+
그래서 ... 일시적인 사용; filesort 사용하기 - 모든 것이 너무 느리게 실행되는 이유는 이것이 문제라고 생각합니다.
이 쿼리는 닫힌 소스 소프트웨어에서 여러 번 실행되므로 변경할 수 없습니다. 그러나이 쿼리가 더 빨리 실행될 수 있도록 테이블/인덱스를 최적화하고 싶습니다. 어떤 도움을 주셔서 감사합니다.
GROUP BY 절을 제거하십시오. 내가 말했듯이 – Strawberry
- 폐쇄 소스 소프트웨어에서 기원 한 것이므로 쿼리를 변경할 수 없습니다. 그래서 나를위한 유일한 해결책은 테이블을 최적화하는 것입니다. – j99