带空格的SQL Server NVARCHAR索引

带空格的SQL Server NVARCHAR索引,sql,sql-server,performance,indexing,Sql,Sql Server,Performance,Indexing,有谁能告诉我为什么第一个查询执行完整表扫描,而第二个查询使用索引 该表在(ContractType、MaterialType)上具有非唯一的非聚集索引。表是非规范化的,这就是为什么我使用nvarchars而不是外键,我希望保持这种方式。请参见此处以获得答案,因为这个问题基本上是它的重复(我当时没有意识到) 可能是因为它估计第一个将匹配更多的行,因此它必须比第二个进行更多的查找。我同意@MartinSmith。看看表中的数据。有多少行与“Price Only”和“Price”匹配?这是真的,但是

有谁能告诉我为什么第一个查询执行完整表扫描,而第二个查询使用索引


该表在(ContractType、MaterialType)上具有非唯一的非聚集索引。表是非规范化的,这就是为什么我使用nvarchars而不是外键,我希望保持这种方式。

请参见此处以获得答案,因为这个问题基本上是它的重复(我当时没有意识到)


可能是因为它估计第一个将匹配更多的行,因此它必须比第二个进行更多的查找。我同意@MartinSmith。看看表中的数据。有多少行与“Price Only”和“Price”匹配?这是真的,但是为什么它要进行全表扫描呢?为什么不简单地使用索引呢?那不是更快吗?不,除非这个值是选择性的,否则它不会更快。因为它必须使用索引,所以无论如何都要返回堆以获取索引中未包含的列的值。转折点通常是,如果它们与查找无关,您应该使用-这将保持索引查找相同,但不需要在表中查找列。然而,在我遇到实际的性能问题之前,我不会开始这样做。例如,不要认为表格扫描总是一件坏事。