我的报告查询需要4分钟,并且在我们最长允许的30秒限制之内。
我注意到它有很多INNER JOINS。我知道,其中一个是连接到一个包含数百万行的Person表。我想知道打破查询是否更有效率。做类似的事情会更有效率吗?
假设所有密钥都已编入索引。 表C有800万条记录,表B有600万条记录,表A有400,000条记录。
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
基本上,将结果集带入临时表,然后加入。
答案 0 :(得分:3)
如果您的Person表被正确编入索引,那么INNER JOIN不应该导致这样的问题。检查是否在所有表中已加入的列上创建了索引。使用临时表来看似乎是一个相对简单的查询似乎是在论证数据库设计不足的问题。
正如其他人所说,唯一可以确定的方法是发布您的查询计划。