我有一个需要4分钟的报告查询,并且在我们的最大允许限制下应用了30秒。我应该使用临时表吗?
我注意到它有很多内部连接。其中一个,我看,它是加入到一个Person表格中,该表格有数百万行。我想知道如果分解查询会更有效率。这样做效率会更高:
假设所有密钥都已编入索引。 表C有800万条记录,表B有600万条记录,表A有40万条记录。
SELECT Fields
FROM TableA A
INNER JOIN TableB B
ON b.key = a.key
INNER JOIN Table C
ON C.key = b.CKey
WHERE A.id = AnInput
或者
SELECT *
INTO TempTableC
FROM TableC
WHERE id = AnInput
- TempTableC现在有1000条记录 然后
SELECT Fields
FROM TableA A
INNER JOIN TableB B --Maybe put this into a filtered temp table?
ON b.key = a.key
INNER JOIN TempTableC c
ON c.AField = b.aField
WHERE a.id = AnInput
基本上,带来的结果集到临时表,然后再加入。
如果可能,请发布缓慢查询的执行计划。 – Tony
6-8百万条记录不是那么大,并且不会在正确编制索引的表上造成问题。我经常处理4亿个记录表,这些记录表对查询来说表现很好。 – Jamiec
提供的执行计划将提供洞察实际性能开销发生的位置,以及验证正确的索引使用情况。请分享。 –