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