Поиск недостающих ключей - PullRequest
3 голосов
/ 03 июня 2011

Могу ли я ускорить это утверждение в Ms Access 2007?

SELECT *
FROM (SELECT DISTINCT p.zipcode, p.place FROM p) AS tmp
WHERE NOT EXISTS 
  (SELECT * FROM zipcodes WHERE 
    (tmp.zipcode=zipcodes.zipcode) AND (tmp.place=zipcodes.place));

Я хочу найти комбинации (почтовый индекс, место) в таблице p, которых нет в таблице zipcodes.

Таблица p довольно большая, но при уменьшении до tmp содержит около 40 000 записей. Таблица zipcodes содержит около 15.000 записей. Таблица zipcodes проиндексирована (почтовый индекс, место).

Требуется больше часа, чтобы получить мой результат. Могу ли я получить это быстрее? Могу ли я увидеть план выполнения в Access 2007? (Я не обычный пользователь Access, а также не эксперт по SQL.)

С уважением, Карстен.

Ответы [ 2 ]

5 голосов
/ 03 июня 2011

Вы можете ВЛЕВО СОЕДИНИТЬ две таблицы и исключить совпадающие строки из набора результатов.С таблицей почтовых индексов, индексированной по почтовому индексу и месту, это может быть намного быстрее, чем у вас сейчас.Надеюсь, достаточно быстро, вам не нужно прибегать к созданию промежуточной временной таблицы.

SELECT DISTINCT p.zipcode, p.place
FROM p LEFT JOIN zipcodes AS z ON (p.place = z.place) AND (p.zipcode = z.zipcode)
WHERE (((z.zipcode) Is Null));

Редактировать : Вы попросили просмотреть план выполнения.Начните с этой статьи на TechRepublic: Используйте ShowPlan для Microsoft Jet для написания более эффективных запросов Вы также можете найти дополнительную информацию, выполнив поиск в Интернете для "Jet ShowPlan".

1 голос
/ 03 июня 2011

Во-первых, я бы создал «настоящую» таблицу tmp вместо того, чтобы использовать ее таким образом.Уже одно это может помочь (не уверен).Во-вторых, я хотел бы убедиться, что в таблице p есть индекс по почтовому индексу, а если это не поможет, то и в таблице tmp.Если это по-прежнему не помогает, также создайте индекс для комбинации (почтовый индекс, место) на zipcodes.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...