Aad*_*mia 0 sql database performance query-performance
我希望提高从表中选择几列的查询的性能。想知道限制列数是否会对查询性能产生任何影响。
我可能误解了这个问题,但无论如何,这里是:
您选择的绝对列数不会产生巨大差异。但是,这选择可以使显著差异取决于表是如何索引列。
如果您只选择索引覆盖的列,那么数据库引擎可以只使用索引进行查询,而无需获取表数据。但是,如果您甚至使用未涵盖的一列,则它必须获取整行(键查找),这将显着降低性能。有时它会严重影响性能,以至于数据库引擎选择进行全盘扫描,而不是打扰索引;这取决于选择的行数。
因此,如果通过删除列可以将其转换为覆盖查询,那么是的,它可以提高性能。否则,可能不会。反正不明显。
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)
然后第二个查询再次变快,因为数据库引擎永远不需要读取该行。