To pytanie dotyczy skuteczności techniki indeksowania programu SQL Server. Myślę, że jest to znane jako „przecięcie indeksu”.
Pracuję z istniejącą aplikacją SQL Server (2008), która ma wiele problemów z wydajnością i stabilnością. Programiści zrobili kilka dziwnych rzeczy z indeksowaniem. Nie udało mi się uzyskać jednoznacznych testów porównawczych w tych kwestiach, ani też nie mogę znaleźć żadnej naprawdę dobrej dokumentacji w Internecie.
W tabeli jest wiele przeszukiwalnych kolumn. Twórcy utworzyli indeks jednej kolumny na KAŻDEJ z możliwych do przeszukiwania kolumn. Teoria była taka, że SQL Server będzie w stanie łączyć (przecinać) każdy z tych indeksów, aby w większości przypadków skutecznie uzyskać dostęp do tabeli . Oto uproszczony przykład (prawdziwa tabela ma więcej pól):
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
Myślę, że indeksy wielu kolumn ukierunkowane na kryteria wyszukiwania są znacznie lepsze, ale mogę się mylić. Widziałem plany zapytań, które pokazują, że SQL Server wykonuje dopasowanie skrótu dla dwóch prób indeksowych. Być może ma to sens, gdy nie wiesz, jak przeszukiwana jest tabela? Dzięki.