这个问题是关于 SQL Server 索引技术的有效性。我认为它被称作“索引交集”。
我正在处理一个已有的 SQL Server(2008)应用程序,它存在一些性能和稳定性问题。开发人员在索引方面做了一些奇怪的事情。我无法得出这些问题的确切基准测试结果,也找不到任何真正好的文档在网络上。
表中有很多可搜索的列。开发人员在每个可搜索的列上创建了单列索引。理论上,SQL Server 将能够组合(交集)这些索引以在大多数情况下高效地访问表格。以下是一个简化的例子(实际表格具有更多字段):
CREATE TABLE [dbo].[FatTable](
[id] [bigint] IDENTITY(1,1) NOT NULL,
[col1] [nchar](12) NOT NULL,
[col2] [int] NOT NULL,
[col3] [varchar](2000) NOT NULL, ...
CREATE NONCLUSTERED INDEX [IndexCol1] ON [dbo].[FatTable] ( [col1] ASC )
CREATE NONCLUSTERED INDEX [IndexCol2] ON [dbo].[FatTable] ( [col2] ASC )
select * from fattable where col1 = '2004IN'
select * from fattable where col1 = '2004IN' and col2 = 4
我认为面向搜索条件的多列索引要好得多,但我可能错了。我见过显示 SQL Server 在两个索引查找上执行哈希匹配的查询计划。也许在不知道表如何被搜索时,这样做是有道理的?谢谢。