【发布时间】:2019-12-06 02:51:17
【问题描述】:
有没有更好更短的方法来生成如下 SQL 查询? 更好的可能是更短的查询或/和最快的性能影响到服务器
select TowerID, COUNT(TowerID) as 'QTY'
from (
select TowerID, [USER] as 'QTY'
from ColoEngDBLocal..Carriers
where [Status] not like '%removed%'
group by TowerID, [USER]
) as a
group by TowerID
order by TowerID
在小数据上使用这个查询似乎没有什么区别,但是当我在大数据上使用这个查询时,查询变得很慢。 (我有超过 600k 行)
目前我有如下表
注意:我使用的是SQL Server 2008 R2
【问题讨论】:
-
您能否展示一些示例数据(使用 DDL+DML 语句,即创建一个表变量并填充它)和预期结果。
-
对于性能问题,显示查询计划总是有帮助的。
-
如果你不知道的话。但 SQL Server 2008 已经过时,不再受支持。尽快升级是明智之举。
-
@Ardi,试试我的回答。希望对您有所帮助。
-
条件
where status like '%removed%'引发了性能危险信号。 SQL 引擎需要为“status”的每个值搜索子字符串“removed”,并且不能利用列上的任何索引。您可能想看看暂时删除此条件是否会提高性能;如果是这样,您可能需要规范化该字段或创建一个专用列来指示该记录已被删除。如果这还不够,索引新列或规范化列可能会进一步提高查询性能。
标签: sql-server sql-server-2008 sql-server-2008-r2