字段数量对查询性能的影响测试
先批量插入 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 开销,也能提高查询性能。
Previous: 查询执行时间统计
Next: GROUP BY 分组查询与聚合函数