目前我有一个大约有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
答案 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}}检查。