最有效的方式来查询SQL Server大表几乎完整的结果集
问题描述:
我有一个SQL Server 2014中有大量行的表。我们称之为TableA。最有效的方式来查询SQL Server大表几乎完整的结果集
我需要查询其PK(自动增量ID,聚集键)为几乎所有行(比方说,该行的97%),且该结果集通常是在通过另一个表(表B)加入外键(我们称之为FK_A)。
查询看起来像:
SELECT
TableB.someColumnNotFKNorPK
FROM
TableB
INNER JOIN
TableA ON TableB.FK_A = TableA.ID
WHERE
TableA.LowSparseColumn = 100
的问题是,TableA
与LowSparseColumn = 100
行的97%,因此这个产量,因为SQL Server需要藏匿的部分结果
你知道如何处理这样的问题吗?
任何帮助真的很感激!
谢谢!
答
如果您有TableB(fk_A)
索引(或更好,但(TableB(fk_A, someColumnNotFKNorPK)
和你的表的统计信息是最新的,那么优化应该做的工作。它应该阅读TableA
,并做了一个连接以TableB
没有后台。
你可以重写查询,如:
SELECT TableB.someColumnNotFKNorPK
FROM TableB
WHERE EXISTS (SELECT 1
FROM TableA
WHERE TableB.FK_A = TableA.ID AND
TableA.LowSparseColumn = 100
);
这应该使索引的最佳使用上TableA(ID, LowSparseColumn)
(虽然该索引是没有必要的,如果ID
是主键)
可能是由于[LowSparseColumn = 100]上的[创建过滤索引](https://docs.microsoft.com/zh-cn/sql/relational-databases/indexes/create-filtered-indexes)。 –
我不认为如此过滤的索引将在这里帮助,因为97%的行满足该标准,创建过滤索引的主要考虑因素之一应该是相关记录应该是最小的。 LowSparseColumn上的简单非聚集索引可能会提高速度。 –