2013-07-04 2 views
3

저는 MySQL 데이터베이스에 연결하여 VBA 프로그램을 사용하여 일부 정보를 검색하는 데 탁월합니다. 처음에는 프로그램이로드 될 때 아래 쿼리가 있습니다.MySQL에 최적화 된 쿼리가 없습니다.

SELECT A.id,A.first_name,A.last_name FROM Table1 A WHERE A.ID NOT IN(SELECT DISTINCT 
SUBJECT FROM Table2) 

표 1과 같은 데이터가 있습니다.

  • 1 크리스찬 베일
  • 2 크리스토퍼 놀란

표 2는 같은 데이터가 있습니다.

  • 1 배트맨 acted_in
  • 2 배트맨
  • 감독 등
은 위에 주어진

내 쿼리 한 총 행 그러나 표 2에 적은만큼 완벽하게 잘 작동 는, 현재 나의 데이터가 테이블 1에서 26000 개의 행과 테이블 2에서 102000 개의 행이 포함되어 있습니다. 따라서 위의 쿼리를 프로그램에서 실행하면 쿼리를 실행하는 데 약 30 분이 걸리고 때로는 제대로 실행되지 않습니다. 아래의 쿼리도 시도했지만 오랜 시간이 걸립니다.

SELECT A.id, A.first_name, A.last_name FROM Table1 a 
WHERE NOT EXISTS 
(
    SELECT 1 
    FROM Table2 al 
    WHERE a.id = al.subject 
) 

검색어를 바꾸는 효과적인 방법이 있습니까?

답변

4

를 사용하여 외부 그러나 쿼리 테이블에 대한 직접 링크와 함께가 아닌 SELECT DISTINCT에 인라인보기로 더 잘 수행 할 수있다, 다른 제공 대답

SELECT A.* 
FROM Table1 a 
LEFT OUTER JOIN (SELECT DISTINCT subject 
      FROM Table2) b ON a.id = b.subject 
WHERE b.subject IS NULL 
+0

는 MySQL 버전에이 의존인가? SQL 구문 오류가 발생합니다. – Ramesh

+0

바깥 쪽 조인이 아닌 바깥 쪽 조인트 여야합니다. – Barmar

+0

차가움. 고마워. – Ramesh

0

유사 가입 :

SELECT t1.* 
FROM Table1 t1 
LEFT JOIN Table2 t2 ON t1.id = t2.subject 
WHERE t2.subject IS NULL 
0

검색어 :

SELECT a.* 
FROM Table1 a 
WHERE NOT EXISTS (SELECT subject 
        FROM Table2 b 
        WHERE a.id = b.subject)