2016-07-11 2 views
1

다른 테이블에없는 테이블에서 데이터를 찾으려고합니다.왼쪽 연결 최적화

다른 솔루션을 사용하려고했지만 내 문제는 항상 성능 (table_a는 ~ 100 000 개의 행이 있고 table_b는 580 만 개의 행이 있음)입니다.

빠른 방법과 (또는) 효과적인 방법이 있습니까? 사전에

감사합니다 ... 당신은 (필요하지 않음)를보다 효율적으로 수도의 NOT EXISTS() 버전을 사용해 볼 수 있습니다

SELECT 
    * 
FROM 
    table_a a 
LEFT JOIN 
    table_b b ON b.field_one = a.field_one 
WHERE 1 
    AND b.id IS NULL 
+0

두 테이블에 인덱스를 설정할 수 있습니다. 이렇게하면 조인의 성능이 향상됩니다. 이거 해 봤니? –

+1

두 테이블에 대한'create table' 문을 보여주세요. – Alex

+1

절대로 *를 사용하지 마십시오. 이 경우 테이블 b에는 데이터가 없지만 열을 반환하기 때문에 많은 불필요한 열을 추가합니다. 그것은 자원을 소모합니다. SELECT *는 SQL 반 패턴이며 프로덕션 코드에 나타나서는 안됩니다. – HLGEM

답변

2

:

SELECT * FROM Table_a a 
WHERE NOT EXISTS(SELECT 1 FROM Table_b b 
       WHERE a.field_old = b.field_one) 

또한 추가하는 것을 고려한다 (아직 가지고 있지 않다면) 테이블의 인덱스 :

Table_a(Field_one) 
Table_b(Field_one) 

Unles 그 테이블은 정말 넓고 (컬럼이 많다), 너무 오래 걸리지 않아야하는 정확한 인덱스를 가진이 양의 데이터가있다.