Це питання стосується ефективності методики індексації SQL Server. Я думаю, це відоме як "перетин перетину".
Я працюю з існуючим додатком SQL Server (2008), який має ряд питань щодо продуктивності та стабільності. Розробники зробили деякі дивні речі з індексуванням. Мені не вдалося отримати переконливих орієнтирів з цих питань, а також не можу знайти жодної справді хорошої документації щодо мереж.
На столі є багато стовпців, які можна шукати. Розробники створили єдиний індекс стовпців на EACH пошукових стовпців. Теорія полягала в тому, що 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 виконує хеш-відповідність на двох пошуках індексу. Можливо, це має сенс, коли ви не знаєте, як шукається таблиця? Спасибі.