查询SQL Server大表的最有效方法几乎完整的结果集

时间:2017-05-14 10:58:50

标签: sql sql-server performance database-performance large-data

我在SQL Server 2014中有一个包含大量行的表。我们称之为TableA。

我需要查询其PK(一个AUTOINCREMENT ID,CLUSTERED KEY)几乎所有行(比方说,97%的行),这个结果集通常与另一个表连接(表B)通过外键(让我们称之为FK_A)。

查询如下:

SELECT 
    TableB.someColumnNotFKNorPK
FROM   
    TableB 
INNER JOIN 
    TableA ON TableB.FK_A = TableA.ID
WHERE  
    TableA.LowSparseColumn = 100

问题是TableA有97%的行带有LowSparseColumn = 100,因此这会产生行假脱机等因为SQL Server需要存储部分结果

你知道如何处理这个问题吗?

非常感谢任何帮助!

谢谢!

1 个答案:

答案 0 :(得分:2)

如果您有TableB(fk_A)的索引(或者更好(TableB(fk_A, someColumnNotFKNorPK)并且您的表统计信息是最新的),那么优化程序应该完成它的工作。它应该是{{1}并且在没有假脱机的情况下加入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)是主键,则不需要该索引)。