如何使用索引加速当前查询

Fil*_*ara 6 sql t-sql sql-server indexing azure-sql-database

我在Azure SQL数据库中使用v12服务器,我有下表:

CREATE TABLE [dbo].[AudienceNiches]( [Id] [bigint] IDENTITY(1,1) NOT NULL, [WebsiteId] [nvarchar](128) NOT NULL, [VisitorId] [nvarchar](128) NOT NULL, [VisitDate] [datetime] NOT NULL, [Interest] [nvarchar](50) NULL, [Gender] [float] NULL, [AgeFrom18To24] [float] NULL, [AgeFrom25To34] [float] NULL, [AgeFrom45To54] [float] NULL, [AgeFrom55To64] [float] NULL, [AgeFrom65Plus] [float] NULL, [AgeFrom35To44] [float] NULL, CONSTRAINT [PK_AudienceNiches] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) )

我正在执行此查询:(更新查询)

`select  a.interest, count(interest) from (
select visitorid, interest
from audienceNiches
WHERE WebsiteId = @websiteid
AND VisitDate >= @startdate
AND VisitDate <= @enddate
group by visitorid, interest) as a
group by a.interest`
Run Code Online (Sandbox Code Playgroud)

我有以下索引(所有ASC):

idx_WebsiteId_VisitDate_VisitorId idx_WebsiteId_VisitDate idx_VisitorId idx_Interest

问题是我的查询返回18K行aproximaly并需要5秒,整个表有8.8M记录,如果我扩展一点数据时间增加了很多,那么,这个查询的最佳索引是什么?我错过了什么?

WW.*_*WW. 2

此查询的最佳索引是这些列上的复合索引,按以下顺序:

  • 网站ID
  • 访问日期
  • 兴趣
  • 访客ID

这允许从索引中完全回答查询。WebsiteIdSqlServer 可以对 ( , )进行范围扫描VisitDate,然后排除 null Interest,最后对VisitorIds索引中的所有元素进行计数。索引条目将按正确的顺序排列,以允许这些操作有效地进行。