投影数对查询性能的影响

Aad*_*mia 0 sql database performance query-performance

我希望提高从表中选择几列的查询的性能。想知道限制列数是否会对查询性能产生任何影响。

tva*_*son 5

我认为,减少列数对查询速度的影响非常有限,但对数据传输速度的影响可能更大。您选择的数据越少,需要通过线路传输到您的应用程序的数据就越少。


Aar*_*ght 5

我可能误解了这个问题,但无论如何,这里是:

您选择的绝对列不会产生巨大差异。但是,选择可以使显著差异取决于表是如何索引列。

如果您只选择索引覆盖的列,那么数据库引擎可以只使用索引进行查询,而无需获取表数据。但是,如果您甚至使用未涵盖的一列,则它必须获取整行(键查找),这将显着降低性能。有时它会严重影响性能,以至于数据库引擎选择进行全盘扫描,而不是打扰索引;这取决于选择的行数。

因此,如果通过删除列可以将其转换为覆盖查询,那么是的,它可以提高性能。否则,可能不会。反正不明显。

SQL Server 2005+ 的快速示例 - 假设这是您的表:

ID int NOT NULL IDENTITY PRIMARY KEY CLUSTERED,
Name varchar(50) NOT NULL,
Status tinyint NOT NULL
Run Code Online (Sandbox Code Playgroud)

如果我们创建这个索引:

CREATE INDEX IX_MyTable
ON MyTable (Name)
Run Code Online (Sandbox Code Playgroud)

然后这个查询会很快:

SELECT ID
FROM MyTable
WHERE Name = 'Aaron'
Run Code Online (Sandbox Code Playgroud)

但是这个查询会很慢(呃):

SELECT ID, Name, Status
FROM MyTable
WHERE Name = 'Aaron'
Run Code Online (Sandbox Code Playgroud)

如果我们将索引改为覆盖索引,即

CREATE INDEX IX_MyTable
ON MyTable (Name)
INCLUDE (Status)
Run Code Online (Sandbox Code Playgroud)

然后第二个查询再次变快,因为数据库引擎永远不需要读取该行。