Sql server 忽略非聚集索引

Sql server 忽略非聚集索引,sql-server,azure-sql-database,Sql Server,Azure Sql Database,我有存档的\u事件表,其中包含以下索引 CREATE NONCLUSTERED INDEX [IX_archived_events_5] ON [dbo].[archived_events] ( [account_id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLO

我有
存档的\u事件
表,其中包含以下索引

    CREATE NONCLUSTERED INDEX [IX_archived_events_5] ON [dbo].[archived_events]
    (
        [account_id] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
    GO

ALTER TABLE [dbo].[archived_events] ADD  CONSTRAINT [PK_archived_events] PRIMARY KEY CLUSTERED 
(
    [event_type] DESC,
    [id] DESC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
GO
问题是,当我执行以下查询时,我在执行计划中看到它对[PK_归档的_事件]进行Clusterd索引扫描

SELECT *                                  
FROM   archived_events ae WITH(nolock) 
WHERE     ( 30 = ae.[account_id] ) 
非聚集索引被忽略的原因是什么


另请注意,这是SQL Azure,不确定它是否重要。

该表的nvarchar(max)列干扰了索引。我已经将它们转换为nvarchar(n),索引现在可以工作。

表中有多少行?有多少匹配项
30=ae.[account\u id]
?@MartinSmith 400万行…@MartinSmith 717536 match 30=ae.[account\u id]这是表格的18%,所以它可能只需要扫描大约50行就可以得到
前10名。如果您尝试使用更具选择性的谓词会怎么样?@MartinSmith我尝试过许多查询,它的行为总是相同的。