Этот вопрос касается эффективности техники индексации 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 выполняет хэш-сопоставление при двух поисках индекса. Возможно, это имеет смысл, когда вы не знаете, как искать в таблице? Спасибо.