Sql &引用;“性能”;条件计数(*)?

Sql &引用;“性能”;条件计数(*)?,sql,tsql,Sql,Tsql,我正在使用以下命令: SELECT COUNT(*) FROM [User] Where Username like '%m%' 并且返回结果的时间如下所示: SELECT * FROM [User] Where Username like '%m%' 进行条件计数的最快方法是什么?当您在count中使用*时,您将获取查询中不需要的所有数据。只需使用任何常量来计算返回的行数 SELECT COUNT(1) FROM [Use

我正在使用以下命令:

SELECT
    COUNT(*)
FROM
    [User]
Where
    Username like '%m%' 
并且返回结果的时间如下所示:

SELECT
    *
FROM
    [User]
Where
    Username like '%m%' 

进行条件计数的最快方法是什么?

当您在
count
中使用
*
时,您将获取查询中不需要的所有数据。只需使用任何常量来计算返回的行数

SELECT
    COUNT(1)
FROM
    [User]
Where
    Username like '%m%' 

由于与前导的
%
符号进行了类似的比较,因此可以获得相当的执行时间


通过这种方式,它必须查看行,不能从统计数据或索引中提取信息-必须访问表。

您还尝试了什么,结果如何?例如,
COUNT(1)
等。查询速度几乎总是由“where”子句后面的内容定义的。因此,您的查询运行的时间类似。要加快查询速度,可以在username列上创建索引。你已经有了吗?谢谢!我试过这个,它让我比140k记录提高了约25%。没有我所希望的那么重要,那是不正确的。阅读(1)(2),查询中的botleneck类似于%m%,因为谓词是不可搜索的。@KamilG.,您提供的文章非常幼稚,至少是第二个,因为它是根据估计的执行计划做出的。没有考虑逻辑和物理读取等。25%可能是由缓存升温引起的。下一个在这里,索引可以提高性能。由于只返回一个计数,因此不需要读取除
WHERE
子句中引用的列以外的行数据。索引扫描可以提供更好的性能,而不是表扫描。它取决于索引列的宽度与行的宽度。