使用LINQ to SQL从DB进行最佳Count()操作

Guy*_*Guy 4 c# t-sql performance linq-to-sql

DBA告诉我在使用T-SQL时:

select count(id) from tableName
Run Code Online (Sandbox Code Playgroud)

比...更快

select count(*) from tablenName
Run Code Online (Sandbox Code Playgroud)

如果id是主键.

将其外推到LINQ-TO-SQL以下是准确的吗?

这个LINQ-to-SQL语句:

int count = dataContext.TableName.Select(primaryKeyId => primaryKeyId).Count();
Run Code Online (Sandbox Code Playgroud)

比这更高效:

int count = dataContext.TableName.Count();
Run Code Online (Sandbox Code Playgroud)

Phi*_*hil 6

据我了解,你的两个select count陈述没有区别.

使用LINQPad,我们可以检查由不同LINQ语句生成的T-SQL.

对于Linq to SQL两者

TableName.Select(primaryKeyId => primaryKeyId).Count();
Run Code Online (Sandbox Code Playgroud)

TableName.Count();
Run Code Online (Sandbox Code Playgroud)

生成相同的SQL

SELECT COUNT(*) AS [value] FROM [dbo].[TableName] AS [t0]
Run Code Online (Sandbox Code Playgroud)

对于Linq to Entites,他们再次生成相同的SQL,但现在它是

SELECT 
[GroupBy1].[A1] AS [C1]
FROM ( SELECT 
    COUNT(1) AS [A1]
    FROM [dbo].[TableName] AS [Extent1]
)  AS [GroupBy1]
Run Code Online (Sandbox Code Playgroud)