查找丢失的钥匙

Kar*_* W. 3 sql ms-access

我可以加快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));
Run Code Online (Sandbox Code Playgroud)

我想在p表格中找到不在表格中的(邮政编码,地点)组合zipcodes.

p表相当大,但当减少到tmp有大约40.000个条目.该zipcodes表有大约15.000个条目.该zipcodes表索引(zipcode,place).

得到我的结果需要一个多小时.我可以加快速度吗?我可以在Access 2007中看到执行计划吗?(我不是常规的Access用户,也不是SQL专家.)

亲切的问候,卡尔斯滕.

Han*_*sUp 5

您可以LEFT JOIN两个表并从结果集中排除匹配的行.在zipcode和地方索引的zipcodes表,这可能比你现在快得多.希望足够快,你不需要求助于创建一个中间临时表.

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));
Run Code Online (Sandbox Code Playgroud)

编辑:您要求查看执行计划.从TechRepublic上的这篇文章开始:使用Microsoft Jet的ShowPlan编写更有效的查询 您还可以通过在Web上搜索"Jet ShowPlan"来查找更多信息.