Gibt es einen Grund, den Index für sehr kleine Tabellen (bis zu 1000 Zeilen) zu verwenden?

9

Während der Anwendungsentwicklung habe ich viele Tabellen, in denen "kleine" Datenmengen gespeichert sind (normalerweise 10-40 Werte, id+ valueund manchmal type), die Attribute für "Objekte" enthalten, wie z. B. frisch / faul, rot / grün / blau für Produkte.

Ich habe diese Attribute nicht in die Produkttabelle aufgenommen, da elektronische Komponenten nicht frisch sein können und Sauerstoffgas nicht rot sein kann und Tabellen keine unbegrenzte Zeilenanzahl haben können ...

Zum Speichern von Attributen verwende ich benutzerdefinierte kleine Tabellen mit 2-3 Feldern: idzum Verknüpfen, namezum Anzeigen in der Anwendung und manchmal, typewenn sich Attributgruppen in derselben Kategorie befinden.

Primäre "Objekte" sind über viele-zu-viele-Zwischentabellen mit Attributen verknüpft.

Gibt es einen Grund, Indizes für diese "kleinen Wörterbücher" mit weniger als 1000 Elementen (normalerweise 10-40) zu erstellen und zu verwalten?

Meine Zieldatenbank ist Oracle, aber ich hoffe, dass die Antwort herstellerunabhängig ist ...

Ich fülle - nein, habe aber keine technischen Fähigkeiten, um meine Füllung zu rechtfertigen ...

Gavenkoa
quelle

Antworten:

14

Im Allgemeinen ja. In Ermangelung eines Index muss das Zugriffsmuster jede Zeile überprüfen , um festzustellen, ob es diejenige ist, die Sie benötigen oder nicht. Das Problem ist nicht die Tabellengröße, sondern die Parallelität. Abhängig von Ihrer Isolationsstufe blockieren Ihre Scans möglicherweise nicht festgeschriebene Transaktionen, um darauf zu warten, dass Zeilen freigeschaltet werden, die letztendlich "uninteressant" sind. Da Ihr Scan garantiert jede Zeile "betrachtet", blockiert jeder Scan jeden Schreibvorgang (Einfügen, Löschen oder Aktualisieren). Oracle verwendet standardmäßig die Snapshot-Isolation, die in dieser Situation in Ordnung ist (keine Blockierung), andere Anbieter verwenden jedoch standardmäßig etwas anderes, z. SQL Server wird standardmäßig zu lesen verpflichtet , die tut Block.

Wenn ein Index vorhanden ist, werden in Ihrem Zugriffsmuster nur die relevanten Zeilen (innerhalb des gewünschten Schlüsselbereichs) angezeigt, sodass die rein statistische Wahrscheinlichkeit, einen Sperrkonflikt zu treffen, erheblich verringert wird.

Remus Rusanu
quelle
Vielen Dank für die Erklärung, ich habe eine Folgefrage (obwohl es jetzt 3 Jahre später ist). Was ist mit sehr kleinen Tabellen mit maximal 3 oder 4 Zeilen?
Rob
Cert kleine Tabellen (die in 1-2 Seiten passen) werden sehr wahrscheinlich gescannt
Remus Rusanu
@ Remus erforderlich, um Index auf MySQL zu erstellen
Singh Kailash