Was ist die minimale Anzahl von Zeilen, die benötigt werden, um einen Index zu erstellen?

Ich habe Skript erstellt, um Selektivität jeder Spalte für alle Tabellen zu finden. In einigen Tabellen mit weniger als 100 Zeilen ist die Selektivität einer Spalte mehr als 50%. Wo Selektivität = Ausgeprägte Werte / Gesamtzahl Zeilen. Sind diese Spalten für einen Index berechtigt? Oder können Sie mir die Mindestanforderung für die Anzahl der Zeilen erzählen, um einen Index zu erstellen?

Sie können auf jede Spalte indexieren – die Frage ist, ob es Sinn macht und ob dieser Index verwendet wird ….

Typischerweise könnte eine Selektivität von weniger als 1-5% funktionieren – je kleiner dieser Prozentsatz, desto besser. Das Beste sind einzelne Werte aus einer großen Population, zB eine einzelne Kunden-ID aus Hunderten von Tausenden – diese Indizes werden definitiv verwendet werden.

Dinge wie Geschlecht (nur 2 Werte) oder andere Dinge, die nur eine sehr begrenzte Anzahl von möglichen Werten haben, funktionieren normalerweise nicht gut auf einem Index. Zumindest auf eigene Faust – diese Spalten könnten in Ordnung sein, um in einen anderen Index als zweite oder dritte Spalte aufgenommen zu werden.

Aber wirklich, der einzige path, um herauszufinden, ob ein Index sinnvoll ist oder nicht

  • messen Sie Ihre Fragen vorher
  • erstellen Sie den Index
  • Führen Sie Ihre Fragen erneut, überprüfen Sie ihre Ausführungspläne, messen Sie ihre Timings

Es gibt keine goldene Regel, wann ein Index verwendet wird (oder ignoriert) – zu viele variables spielen in diese Entscheidung.

Für einige kompetente Ratschläge, wie man mit Indizes umgehen kann und wie man herausfindet, welche Indizes nicht genutzt werden können und wann es sinnvoll ist, einen Index zu erstellen, siehe Kimberly Tripps Blogbeiträge:

  • Frühlingsreinigung Ihrer Indizes (Teil 1)
  • Frühlingsreinigung Ihrer Indizes (Teil 2)
  • Warum werden nicht die nicht gruppierten Indizes verwendet?

Die meisten DBMS verwenden einen Cache für data und Code (gespeicherte Prozedur, Ausführungsplan, etc.). In SQL server denke ich, dass es den data- und Prozedur-Cache genannt wird , und in Oracle heißt es den Puffer-Cache und die SGA . Tabellendaten und / oder Index können sich im Cache befinden.

Kleiner Tisch, auf den häufig zugegriffen wird, wird höchstwahrscheinlich in den Cache passen. Aber die Tabelle kann aus dem Cache vertrieben werden, sagen wir, wenn eine Abfrage frische data von der Festplatte laden. Es gibt Optionen, um anzuzeigen, dass eine Tabelle dauerhaft im Cache sein soll (siehe PINTABLE ). Das ist vielleicht eine bessere Strategie, die einen Index benutzt, wenn dein Tisch sehr klein ist (was dein Fall ist). Hinzufügen eines Index (der auch immer im Cache sein würde) könnte weiter helfen, aber ich weiß nicht, was wäre der Gewinn.

Die große unterschiedliche performance ist der Festplattenzugriff und der memoryzugriff. Zweck des Index ist es, die datamenge zu reduzieren, um von der Festplatte zu lesen, aber wenn es bereits im memory ist, ist der Gewinn wahrscheinlich klein.

Ich bin mir nicht sicher über sql-server, aber die meisten DBMS verwenden keinen Index für den Abruf, wenn er alle Tabellenzeilen in einer einzigen E / A abrufen kann. Sie sehen dies auf PLAN Erklärungen, einige Tabellen sind immer Tablespace gescannt.

IMHO, jede Tabelle mit weniger als 5000 Zeilen ist nicht wert, für die Kardinalität zu parsing, wenn das DBMS auf einem server läuft.