查询响应时间是否根据匹配记录的数量而变化

时间:2015-04-21 08:38:34

标签: sql sql-server performance

如果我有一个包含100,000,000条记录的表,并且我对单个值进行选择查询,那么根据是否有10条或10,000条匹配的记录,我是否希望查询性能有很大差异?

作为一个例子 -

SELECT * FROM OrderLines ol
WHERE ol.Account = '12151'

将返回10行

SELECT * FROM OrderLines ol
WHERE ol.Account = '9551'

将返回10,000行。

我是否希望这两个查询同等一样?无论是否有指数,这种结果会如何变化?

1 个答案:

答案 0 :(得分:0)

简短回答,需要更长时间。是否需要更长的时间取决于您的定义。看到查询是对单个表的简单查询,只要您的索引以OrderLines.Account开头,它就会很快。但是,除非确实需要所有列,否则应避免使用SELECT *。它减少了查询解析器可用的选项,并且可能需要进行额外的读取以获取一些数据。

使用不返回SELECT *

的通用查询的更长答案

让我们说你有一个查询

SELECT Value1 FROM dbo.Table1 WHERE Value2 = 123;

Value2上的索引,可能的查询计划是对该索引执行索引查找。然后会发生什么取决于索引是否为覆盖索引(包括Value1)。

如果是,那么它将在索引搜索期间读取10或10,000条记录中的每条记录,并获得所需的所有信息。

如果不是,那么它将读取每条记录,然后还需要执行另一次读取以获得Value1

在任何一种情况下,10,000美元都需要更长的时间,但如果索引没有覆盖则更多。请注意,当查询单个表时,聚簇索引始终是覆盖索引,因为叶节点包含所有列。