我可以加快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专家。)
亲切的问候, Karsten。
没有理由在返回NULL时做'NOT EXISTS(SELECT * ...)'应该做同样的事情(你只是检查是否存在匹配的行,存储在行中的实际数据最终是不相关的) – 2011-06-03 14:32:57
我是否正确理解我可以放弃EXISTS关键字,即'WHERE NOT(SELECT *)...'? – 2011-06-03 14:49:00
不,您需要存在'关键字,但您的'select'语句可以简单地'select null'而不是'select *',因为你实际上并不关心行中的数据是什么,只有没有行符合你的条件。 – 2011-06-03 14:54:16