In dieser Frage geht es um die Effektivität einer SQL Server-Indizierungstechnik. Ich denke, es ist als "Indexschnittstelle" bekannt.
Ich arbeite mit einer vorhandenen SQL Server (2008) -Anwendung, die eine Reihe von Leistungs- und Stabilitätsproblemen aufweist. Die Entwickler haben einige seltsame Dinge mit Indizierung gemacht. Ich habe zu diesen Themen keine schlüssigen Benchmarks erhalten und auch keine wirklich gute Dokumentation im Internet gefunden.
Es gibt viele durchsuchbare Spalten in einer Tabelle. Die Entwickler erstellten einen einzelnen Spaltenindex für JEDE der durchsuchbaren Spalten. Die Theorie war, dass SQL Server in der Lage sein würde, jeden dieser Indizes zu kombinieren (zu schneiden), um unter den meisten Umständen effizient auf die Tabelle zuzugreifen . Hier ist ein vereinfachtes Beispiel (echte Tabelle hat mehr Felder):
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
Ich denke, dass mehrere Spaltenindizes, die auf Suchkriterien abzielen, viel besser sind, aber ich kann mich irren. Ich habe Abfragepläne gesehen, die zeigen, dass SQL Server bei zwei Indexsuchen eine Hash-Übereinstimmung ausführt. Vielleicht ist das sinnvoll, wenn Sie nicht wissen, wie die Tabelle durchsucht wird? Vielen Dank.