对小表的简单 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 计算机上执行。 tableDocumentsCompanies的记录数只有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 但查询应该很快