Oft muss ich Abfragen für große Tabellen ausführen, die nicht den richtigen Index haben. Deshalb bitte ich den DBA, einen solchen Index zu erstellen. Das erste, was er tut, ist die Tabellenstatistik und die Größe des Indexbereichs.
Oft sagte er mir, ich solle eine alternative Lösung finden, weil "der Index bereits größer ist als die Tabelle". Er meint, der Index müsse kleiner sein als die Daten, weil er mir sagte: "Haben Sie den Index jemals in einem Buch gesehen? Er ist viel kleiner als das Buch selbst, und so sollte ein Tabellenindex sein."
Ich glaube nicht, dass seine Philosophie richtig ist, aber ich kann ihn nicht herausfordern, weil er ein leitender DBA ist und ich ein Entwickler bin. Ich denke, wenn eine Abfrage einen Index benötigt, sollte der Index nur erstellt werden, anstatt "Workarounds" zu finden, die nur unlesbare und nicht wartbare SPs erzeugen.
Ich wähle nur die erforderlichen Spalten aus. Das Problem besteht darin, dass ich nach Datum filtere, damit die Engine unbedingt einen Tabellenscan durchführt, um die Spalten abzugleichen. Die Abfrage wird einmal am Tag und nachts ausgeführt, um Statistiken zu erfassen. Die Ausführung dauert jedoch 15 Minuten (wir haben eine andere feste Regel: Kein Vorgang sollte länger als 3 Minuten dauern).
Der DBA hat mir die Indexstatistik gezeigt. Es gab ungefähr 10 Indizes auf dieser Tabelle, von denen nur 6 verwendet wurden (Statistiken zeigten null Treffer zu 4 von ihnen). Dies ist ein großes System mit über 20 teilnehmenden Entwicklern. Die Indizes wurden aus irgendeinem Grund erstellt und wahrscheinlich nicht mehr verwendet.
Wir müssen SQL Server 2008 unterstützen, da auf diesen Datenbanken die Tests ausgeführt werden. Aber die Kunden sind alle auf 2014 und 2016.