두 테이블을 가지고 있는데,이 두 테이블 사이의 공통 필드가 정확히 일치하는 행을 선택하려고하지만 쿼리를 작성하기가 어렵습니다. 여기에 단순화 된 버전입니다 :작은 솔루션 세트를 위해 거대한 결과 테이블을 생성하는 Mysql join
표는이 (간체)처럼 : 나는 함께 경우에만 t1.sn = t2.sn t1.name 및 t2.loc을 얻으려고
T1: id, name, sn T2: id, location, sn
. sn 필드는 둘 다 고유하므로 테이블 사이에 하나의 레코드 만 일치합니다. t1에서 모든 레코드는 sn 필드 값을 갖지만 t2에서는 약 30 %가 sn에 대해 NULL을 갖습니다. 그래서, 나는 조인이 t1보다 약간 적은 행을 생성 할 것으로 기대합니다.
어떻게 가입합니까?
감사합니다.
샘플 데이터 : 위 예에서
t1: +---+--------+-------+-----+ | id| name | sn | ... | +---+--------+-------+-----+ | 1 | thing1 | 12345 | | | 2 | thing2 | 10000 | | | 3 | thing3 | 33445 | | | 4 | thing4 | 99223 | | +---+--------+-------+-----+ T2: +----+--------+-------+-----+ | id | loc | sn | ... | +----+--------+-------+-----+ | 90 | here | 12345 | | | 92 | there | NULL | | | 96 | near | 33445 | | | 99 | far | 99223 | | +----+--------+-------+-----+ Result: +--------+-------+-------+ | name | loc | sn | +--------+-------+-------+ | thing1 | here | 12345 | | thing3 | near | 33445 | | thing4 | far | 99223 | +--------+-------+-------+
, 유사한 무언가 "이름, LOC, t1.sn t2.sn = T2에서 T1로부터 가입 t1.sn 선택". 쿼리가되는 생각은 sn 값이 일치하는 행을 반환합니다. 내 실제 DB에는 30k 행이 있고, 실행 및 대기를 설정하면 결국 쿼리를 종료하기 전에 결과 테이블에 약 400k 행이 있습니다. – AaplMike
t2.sn의 단일성을 확인하기 위해 이것을 시도하십시오 : t1에서 nb로 count (1)을 선택하십시오. t1에서 내부 결합 t2 on (t1.sn = t2.sn) nb> 1을 갖는 그룹 t1.id – Keil
@MikeC : 그러나 당신이 얻고있는 400k 결과는 틀린가? 당신의 질문은 실제로 그 쿼리의 성능을 향상시키는 방법에 관한 것입니까? (첫 번째 대답은 각각의'sn' 열에서 두 테이블 모두에 인덱스가 있음을 보장합니다)? – eggyal