编写此查询的最佳方法是什么

时间:2009-07-14 03:28:01

标签: sql ms-access

我的数据库中有一个包含1.1MM记录的表。我的数据库中有另一个表,在字段名称“NAME”下有大约2000条记录。我想要做的是使用较小的表从表1中搜索并拉出与较小的表记录匹配的记录。例如,表1具有名字,姓氏。表2有Name,我想查找表1中包含第一个名称字段或第二个名称字段中的任何表2名称的每个记录。我尝试只是进行访问查询,但我的计算机只是冻结了。任何想法都会被贬低。

5 个答案:

答案 0 :(得分:2)

您考虑过以下事项:

Select Table1.FirstName, Table1.LastName 
from Table1 
where EXISTS(Select * from Table2 WHERE Name = Table1.FirstName) 
   or EXISTS(Select * from Table2 WHERE Name = Table1.LastName)

我之前在大型表上发现这可能比内部联接更好。

答案 1 :(得分:1)

确保在Table1.first_name,Table1.last_name和Table2.name上创建索引。它们将大大加快您的查询速度。

编辑:对于Microsoft Access 2007,请参阅CREATE INDEX

答案 2 :(得分:0)

请参阅上面有关索引的上述说明,但我相信您的描述需要:

select table1.* from table1 
  inner join 
    table2 on (table1.first_name = table2.name OR table1.last_name = table2.name);

答案 3 :(得分:0)

它应该是这样的,

Select Table1.FirstName, Table1.LastName 
from Table1 
where Table1.FirstName IN (Select Distinct Name from Table2) 
   or Table1.LastName  IN (Select Distinct Name from Table2)

还有其他各种方法来运行同一个查询,我建议您查看每个查询的执行计划,以找出哪一个最快。此外,在“where”条件中使用的列上创建索引也将加快查询速度。

答案 4 :(得分:0)

我同意旁观者。根据我的经验,使用EXIST代替IN要快得多。