如何加速涉及count的SQL Server查询(distinct())

Tim*_*man 4 sql t-sql sql-server query-optimization sql-server-2008

我有一个看似简单的SQL Server查询,比我预期的要花费更长的时间.

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT COUNT(DISTINCT(guid)) FROM listens WHERE url='http://www.sample.com/'
Run Code Online (Sandbox Code Playgroud)

'guid'是varchar(64)NULL

'url'是varchar(900)NULL

guid和url有一个索引.

'listens'表中有超过700万行,其中17,000行与相关网址相匹配,查询结果为5,500.

在具有1GB RAM的相当空闲的双核AMD Opteron 2GHz上,在SQL Server 2008上运行此查询需要1分钟以上.

有关如何缩短执行时间的任何想法?理想情况下它应该在1秒以内!

Qua*_*noi 5

在url上创建一个索引,它将覆盖GUID:

CREATE INDEX ix_listens_url__guid ON listens (url) INCLUDE (guid)
Run Code Online (Sandbox Code Playgroud)

在将url作为标识符处理时,最好存储和索引URL哈希而不是整体URL.