我的查询执行时间太长。它很简单,表格很小。简化的查询(但仍然很慢)是:
SELECT D.ID, C.Name, T.Name AS TownName
FROM Documents D, Companies C, Towns T
WHERE C.ID = D.Company AND T.ID = C.Town
ORDER BY C.Name
正确设置表之间的主键和外键。此外,列Companies.Name
已编入索引。
我尝试使用JOIN,重新启动SQL Server,重建索引等,但在使用SSD的计算机上执行仍需要大约40秒。表Documents
和Companies
中的记录数仅为18K(目前为1:1),表Towns
中仅有约20条记录。
另一方面,以下查询完全返回相同的记录,但实际上没有时间执行:
SELECT D.ID, C.Name, (SELECT Name FROM Towns WHERE ID = C.Town) AS TownName
FROM Documents D, Companies C
WHERE C.ID = D.Company
ORDER BY C.Name
在我看来,第一个查询应该更快,但我显然是错的。有没有人知道这里发生了什么?在按表中的列排序时,似乎忽略了索引,该表是一个表的主数据,另一个表的详细信息。
答案 0 :(得分:1)
我无法解释为什么您的子查询查询运行得更快,但我会尝试其他方法来查看是否可以删除子查询。
当我没有使用条件时,我通常会从最小到最大。所以我的查询看起来像
Select t.Name TownName,
c.Name,
d.Id
From Towns t
Join Companies c ON t.Id = c.Town
Join Documents d ON c.Id = d.Company
Order By c.Name
然后我确保公司有一个关于城镇的索引,并且该文件具有公司的索引和索引.18k记录可能需要一段时间才能显示在输出窗口中,但查询应该非常快< / p>
答案 1 :(得分:0)
使用连接语句时会发生什么?
SELECT D.ID, C.Name, T.Name AS TownName
FROM Documents D
inner join Companies C on C.
inner join Towns T on T.ID = C.Town
ORDER BY C.Name
另外,尝试使用和不使用命令