使用where子句的TSQL计数(Id)性能

时间:2014-05-29 13:19:36

标签: sql sql-server tsql

目前我有一个大约有12百万行的表,我需要根据where子句获得满足特定条件的行数。查询在高峰时段之外每天运行一次。

e.g。

Select Count(Id) from TableName where ColumnName = X  

目前该区域大约需要一分钟才能返回正确的行数。在上述情况下,如果需要where子句,我不知道如何提高性能。在有问题的数据库中,Id,ColumnName位于聚簇索引中。

通常我会使用以下Sql,如果我只想要表中的行数

SELECT OBJECT_NAME(object_id), SUM(row_count) AS rows
FROM sys.dm_db_partition_stats
WHERE object_id = OBJECT_ID(@TableName)
AND index_id < 2
GROUP BY OBJECT_NAME(object_id);

但是,我没有看到任何规定where子句的方法

显而易见的解决方案是在高峰时段用完时增加超时时间,但我宁愿选择这样做作为最后的手段。

感谢您的帮助

Ps SQL Server 2008

2 个答案:

答案 0 :(得分:1)

是的,您可以按照Linoff的回答

进行索引

你也可以试试

从TableName中选择Count(1),其中ColumnName = X;

答案 1 :(得分:0)

这是您的查询:

Select Count(Id) from TableName where ColumnName = X  ;

您已将聚集索引描述为&#34; id,ColumnName&#34;。如果要有效地使用索引,则需要使用其他顺序。所以尝试定义:

create index tablename_columnname_id on tablename(columnname, id);

如果id永远不是NULL,您可以将查询编写为:

Select Count(*) from TableName where ColumnName = X  ;

这会保存对NULL的{​​{1}}检查。

相关问题