이 쿼리를 최적화하는 데 많은 시간을 투자했지만 큰 테이블의 속도가 느려지 기 시작했습니다. 나는 이것이 아마도 최악의 질문 유형이라고 생각하지만 약간의 지침을 찾고 있습니다. 필자는 데이터베이스 스키마를 공개 할 자유가 전혀 없기 때문에 이것은 충분한 정보 일 것입니다.내부 조인을 사용하여 MySQL 쿼리 최적화
- tblA.id 및 tblB.index_id
- tblC.name 및 tblD.s_type
- tblD.name과 : 덕분에,
SELECT tblA.id, tblB.id, tblC.id, tblD.id FROM tblA, tblB, tblC, tblD INNER JOIN (SELECT max(tblB.id) AS xid FROM tblB WHERE tblB.rdd = 11305 GROUP BY tblB.index_id ORDER BY NULL) AS rddx ON tblB.id = rddx.xid WHERE tblA.id = tblB.index_id AND tblC.name = tblD.s_type AND tblD.name = tblA.s_name GROUP BY tblA.s_name ORDER BY NULL;
이
간의 일대 다 관계입니다 tblA.s_name
+----+-------------+------------+--------+---------------+-----------+---------+------------------------------+-------+------------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+------------+--------+---------------+-----------+---------+------------------------------+-------+------------------------------+ | 1 | PRIMARY | derived2 | ALL | NULL | NULL | NULL | NULL | 32568 | Using temporary | | 1 | PRIMARY | tblB | eq_ref | PRIMARY | PRIMARY | 8 | rddx.xid | 1 | | | 1 | PRIMARY | tblA | eq_ref | PRIMARY | PRIMARY | 8 | tblB.index_id | 1 | Using where | | 1 | PRIMARY | tblD | eq_ref | PRIMARY | PRIMARY | 22 | tblA.s_name | 1 | Using where | | 1 | PRIMARY | tblC | eq_ref | PRIMARY | PRIMARY | 22 | tblD.s_type | 1 | | | 2 | DERIVED | tblB | ref | rdd_idx | rdd_idx | 7 | | 65722 | Using where; Using temporary | +----+-------------+------------+--------+---------------+-----------+---------+------------------------------+-------+------------------------------+
사용중인 테이블은 무엇입니까? – whudson05
좀 더 자세한 정보를 추가 할 수 있습니까? 예를 들어,'WHERE tblB.rdd = 11305' 조건을 만족하는 레코드는 몇 개입니까? 실제로 65722입니까? 생성 된 임시 테이블을 제거하면 쿼리에 도움이되지만이 테이블에 무엇이 들어 있는지 모르기 때문에 실제로 말하기는 어렵습니다. – Fenton
답장을 보내 주셔서 감사합니다. 테이블은 InnoDB이다. tblB에는 rdd = 11305 인 41,633 개의 항목이 있습니다. – Doug