【发布时间】:2013-01-22 23:27:16
【问题描述】:
我使用的是 SQL Server 2012。
我正在尝试优化这样的查询:
SELECT TOP 20 ta.id,
ta.name,
ta.amt,
tb.id,
tb.name,
tc.name,
tc.id,
tc.descr
FROM a ta
INNER JOIN b tb
ON ta.id = tb.id
INNER JOIN c tc
ON tb.id = tc.id
ORDER BY ta.mytime DESC
查询运行大约需要 5 - 6 秒。连接中使用的所有列都有索引。这些表有 500k 条记录。
我的问题是:当我从选择中删除列 tc.name、tc.id 和 tc.descr 时,查询会在不到一秒的时间内返回结果。为什么?
【问题讨论】:
-
因为您要从
JOIN中删除整个表。您应该从最大的表开始,然后JOIN到较小的表。 -
c经常被写信吗? -
如果您使用的是 SQL Management Studio,您可以运行优化器来查看执行计划。这可能会提供一些关于问题到底是什么的见解:simple-talk.com/sql/sql-training/the-sql-server-query-optimizer
-
您需要向我们展示表和索引定义。 诊断慢查询需要完整的表和索引定义,而不仅仅是描述或解释。也许您的表格定义不佳。也许索引没有正确创建。也许您认为您在该列上没有索引。没有看到表和索引定义,我们无法判断。如果您知道如何处理
EXPLAIN,请将结果也放入问题中。
标签: sql database-performance query-performance