1 : 1 왼쪽 조인을 수행하는 관계가 1 인 테이블이 두 개 있습니다. 쿼리가 올바른 결과를 반환하지만 느린 쿼리 로그에 표시됩니다 (최대 5 초 소요). 이 쿼리를 작성하는 더 좋은 방법이 있습니까? 1 대 다수 관계가있는 테이블에서 1 대 1 왼쪽 조인을 수행하는 가장 빠른 방법 (MySQL)
select * from
tablea a left join tableb b
on a.tablea_id = b.tablea_id
and b.tableb_id = (select max(tableb_id) from tableb b2 where b2.tablea_id = a.tablea_id)
즉 나는 가장 큰
tableb_id
와
TableB
에 행에 결합
TableA
왼쪽 싶습니다.
TableA
tablea_id
1
2
TableB
tableb_id, tablea_id, data
1, 1, x
2, 1, y
Expected Result
tablea_id, tableb_id, data
1, 2, y
2, null, null
는 TableA의 tablea_id
에 인덱스를 갖고 TableB의 tablea_id,tableb_id
는의 지수를 갖는다.
부질 TableB의 각 행에 대해 실행지고 상관
+----+--------------------+---------------+--------+-----------------+---------------+---------+----------------------+-------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+--------------------+---------------+--------+-----------------+---------------+---------+----------------------+-------+-------------+
| 1 | PRIMARY | c | index | NULL | department_id | 4 | NULL | 18966 | Using index |
| 1 | PRIMARY | recent_cv_lut | eq_ref | PRIMARY,case_id | PRIMARY | 4 | func | 1 | |
| 2 | DEPENDENT SUBQUERY | cases_visits | ref | case_id | case_id | 4 | abcd_records_v2.c.id | 2 | Using index |
+----+--------------------+---------------+--------+-----------------+---------------+---------+----------------------+-------+-------------+
tablea와 tableb에 몇 개의 행이 있습니까? 테이블의 DDL도 게시 할 수 있습니까? –
@AntoanMilkov tablea에는 20,000 개의 레코드가 있고 tableb에는 60,000 개의 레코드가 있습니다. 죄송합니다, ddl을 게시 할 수는 없지만 언급 된 모든 ID 열은 정수입니다. – FuzzyTree
nulls가 실제로 필요합니까? :) –