字段数量对查询性能的影响测试

字段数量对查询性能的影响测试

先批量插入 50 万条记录:

DECLARE @i INT = 1
WHILE (@i <= 500000)
BEGIN
     INSERT INTO [Classx]
           ([Name]
           ,[AddTime]
           ,[Status])
     VALUES
           ('北盟班级' + CONVERT(NVARCHAR(10), @i)
           ,GETDATE()
           ,1)
     SET @i = @i + 1
ENDCode language: PHP (php)

然后对比不同写法查询 50 万条记录的执行时间:

-- 查询所有字段(逐个列出):约 29233 毫秒
SELECT [ID]
      ,[Name]
      ,[AddTime]
      ,[Status]
  FROM [LinqSqlDemo].[dbo].[Classx]Code language: CSS (css)
-- 查询单个字段:约 27972 毫秒
SELECT [Name]
  FROM [LinqSqlDemo].[dbo].[Classx]
GOCode language: CSS (css)
-- 使用 SELECT *:约 32459 毫秒
SELECT *
  FROM [LinqSqlDemo].[dbo].[Classx]
GOCode language: CSS (css)

结论

  • 如果数据量不大的话,上面三种写法差别不大。
  • 字段越少,性能越好,但差别不大。在 50 万条记录的环境中,只查一个字段比查所有字段快约 1.3 秒。
  • SELECT * 比逐个列出所有字段慢约 2.5 秒,因为 SELECT * 需要去读取系统配置表获取该表中的字段名,等价于执行:
SELECT * FROM sys.columns
WHERE object_id = (SELECT object_id FROM sys.objects WHERE name = 'Student')Code language: JavaScript (javascript)

因此,在生产环境中建议避免使用 SELECT *,明确列出所需字段,既能减少不必要的 IO 开销,也能提高查询性能。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注