对小表的简单 SQL 查询执行时间太长
Simple SQL query on small tables takes too long to execute
我有一个查询需要很长时间才能执行。很简单,而且 table 很小。简化的查询(但仍然很慢)是:
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
table 之间的主键和外键设置正确。此外,列 Companies.Name
已编入索引。
我尝试使用 JOIN、重新启动 SQL 服务器、重建索引等,但它仍然需要大约 40 秒才能在我的 SSD 计算机上执行。 tableDocuments
和Companies
的记录数只有18K(目前是1:1),table[=16=只有20条左右的记录].
另一方面,下面的查询returns完全相同的记录,但几乎没有时间执行:
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
在我看来,第一个查询应该更快,但我显然错了。有人知道这里发生了什么吗?在 table 中按列排序时,索引似乎被忽略了,table 是一个大师,另一个细节。
当你使用 join 语句时会发生什么?
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
另外,有和没有顺序都试一下
我无法解释为什么您的子查询 运行 更快,但我会尝试其他方法以查看是否可以消除子查询。
当我不使用 where 条件时,我通常从最小到最大。所以我的查询看起来像
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
然后我会确保 Companies 在 Town 上有索引,Documents 在 Company 上有索引。18k 条记录可能需要一些时间才能显示在输出中 window 但查询应该很快
我有一个查询需要很长时间才能执行。很简单,而且 table 很小。简化的查询(但仍然很慢)是:
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
table 之间的主键和外键设置正确。此外,列 Companies.Name
已编入索引。
我尝试使用 JOIN、重新启动 SQL 服务器、重建索引等,但它仍然需要大约 40 秒才能在我的 SSD 计算机上执行。 tableDocuments
和Companies
的记录数只有18K(目前是1:1),table[=16=只有20条左右的记录].
另一方面,下面的查询returns完全相同的记录,但几乎没有时间执行:
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
在我看来,第一个查询应该更快,但我显然错了。有人知道这里发生了什么吗?在 table 中按列排序时,索引似乎被忽略了,table 是一个大师,另一个细节。
当你使用 join 语句时会发生什么?
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
另外,有和没有顺序都试一下
我无法解释为什么您的子查询 运行 更快,但我会尝试其他方法以查看是否可以消除子查询。
当我不使用 where 条件时,我通常从最小到最大。所以我的查询看起来像
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
然后我会确保 Companies 在 Town 上有索引,Documents 在 Company 上有索引。18k 条记录可能需要一些时间才能显示在输出中 window 但查询应该很快