Zum Inhalt springen
L

Wikipedia · einfach zusammengefasst · Stand

Selektivität (Informatik)

Selektivität ist ein Maß, das in der Informatik bei Datenbankabfragen auf Datenbanktabellen in relationalen Datenbankensystemen gebraucht wird; sie bestimmt …

Inhalt4 Abschnitte
  1. 1. Begriff und Berechnung
  2. 2. Typische SQL-Beispiele
  3. 3. Abschätzung durch das Datenbanksystem
  4. 4. Starke und schwache Selektivität

Begriff und Berechnung

Selektivität ist in relationalen Datenbanksystemen ein Maß dafür, welcher Anteil der Datensätze einer Tabelle eine Selektionsbedingung erfüllt und deshalb in die weitere Verarbeitung eingeht. In SQL stehen solche Bedingungen gewöhnlich in der WHERE-Klausel. Die Selektivität wird häufig mit σ bezeichnet; um eine Verwechslung mit dem Selektionsoperator der relationalen Algebra zu vermeiden, wird auch das Kürzel sel verwendet.

Ein Prädikat P ist ein Vergleichsausdruck, der für jeden Datensatz geprüft wird. Sind |σ_P(A)| die Anzahl der Datensätze aus Tabelle A, die P erfüllen, und |A| die Gesamtzahl ihrer Datensätze, gilt:

sel_P = |σ_P(A)| / |A|

Die Selektivität liegt zwischen 0 und 1. Der Wert 0 bedeutet, dass kein Datensatz die Bedingung erfüllt; bei 1 erfüllen alle Datensätze die Bedingung. Der Wert lässt sich auch als Prozentsatz der nicht ausgefilterten Datensätze verstehen.

Bei einem Join, also der Verknüpfung zweier Tabellen B und C, wird die Anzahl der qualifizierenden Ergebnistupel auf die Gesamtzahl der möglichen Kombinationen im Kreuzprodukt bezogen:

sel_BC = |B ⋈ C| / |B × C| = |B ⋈ C| / (|B| · |C|)

Typische SQL-Beispiele

Eine Tabelle KUNDEN enthält 1000 Datensätze. Die Abfrage „select * from kunden“ besitzt keine Selektionsbedingung und filtert nichts aus. Daher gilt sel = 1000 / 1000 = 1.

Bei „select * from kunden where id < 221“ passieren 220 Datensätze den Filter. Die Selektivität beträgt 220 / 1000 = 0,22. Dagegen liefert „select * from kunden where id > 1000“ eine leere Ergebnismenge; alle Datensätze werden ausgefiltert und die Selektivität ist 0 / 1000 = 0.

Entscheidend ist die Anzahl der Datensätze, die das Selektionsprädikat erfüllen, nicht unbedingt die Zahl der tatsächlich ausgegebenen Ergebniszeilen. Die Abfrage „select count(*) from kunden where id < 401“ gibt wegen der Aggregatfunktion count nur eine Ergebniszeile aus. Dennoch passieren 400 Datensätze den Filter, sodass die Selektivität 400 / 1000 = 0,4 beträgt.

Bei „where id = 300“ wird genau einer von 1000 Datensätzen ermittelt: sel = 1 / 1000 = 0,001. Bei „where name = 'Maier'“ können mehrere Datensätze passen. Gibt es fünf Kunden dieses Namens, beträgt die Selektivität 5 / 1000 = 0,005.

Abschätzung durch das Datenbanksystem

Viele Datenbankmanagementsysteme (DBMS) verwenden einen kostenbasierten Anfrageoptimierer. Er schätzt unter anderem die Selektivität der einzelnen Prädikate, um eine möglichst günstige Zugriffsstrategie für eine Abfrage zu wählen. Eine exakte Bestimmung wäre häufig zu aufwendig. Deshalb nutzt der Optimierer statistische Daten, beispielsweise die Gesamtzeilenzahl einer Tabelle, die Anzahl unterschiedlicher Werte in einer Spalte, die als Kardinalität bezeichnet wird, und die Anzahl der NULL-Werte.

Für ein Prädikat der Form „Spalte = Wert“ kann die Selektivität als sel = 1 / c geschätzt werden, wenn c die bekannte Kardinalität der Spalte ist. Diese Schätzung ist korrekt, wenn die Werte der Spalte gleichmäßig verteilt sind.

Für zusammengesetzte oder negierte Bedingungen können aus den geschätzten Einzelselektivitäten sel₁ und sel₂ weitere Schätzungen gebildet werden:

• Konjunktion mit AND: sel(P₁ AND P₂) = sel₁ · sel₂

• Disjunktion mit OR: sel(P₁ OR P₂) = sel₁ + sel₂ − sel₁ · sel₂. Der letzte Term zieht die Schnittmenge ab, damit sie nicht doppelt gezählt wird.

• Negation mit NOT: sel(NOT P₁) = 1 − sel₁

Starke und schwache Selektivität

Eine hohe Selektivität nahe oder gleich 1 heißt schwache Selektivität: Sehr viele Datensätze erfüllen die Bedingung, sodass nur wenige ausgefiltert werden. Eine niedrige Selektivität nahe oder gleich 0 heißt starke Selektivität: Nur wenige Datensätze erfüllen die Bedingung. Die Grenze zwischen beiden Kategorien ist fließend.

Diese Unterscheidung ist wichtig, weil die Datenbank für eine gute Leistung möglichst wenige Datenblöcke von der Festplatte lesen soll. Bei schwacher Selektivität ist meistens ein Full Table Scan, also das vollständige Durchsuchen der Tabelle, am effizientesten. Da ohnehin ein großer Teil der Datensätze benötigt wird, müssen sehr viele Datenblöcke gelesen werden. Zusätzliche Zugriffe auf die Blöcke eines Datenbankindexes würden dann unnötigen Aufwand verursachen. Enthält ein Index in einem Spezialfall alle abgefragten Daten, kann stattdessen ein Full Index Scan verwendet werden.

Bei starker Selektivität ist der Zugriff über einen passenden Datenbankindex meist günstiger. Erfüllt beispielsweise nur ein Datensatz das Prädikat, wäre das Einlesen aller Tabellenblöcke ineffizient. Beim Indexzugriff müssen nur wenige Indexblöcke sowie der Tabellenblock mit dem gesuchten Datensatz gelesen werden.

Der Anfrageoptimierer schätzt deshalb für jede Abfrage die Selektivität und wählt darauf aufbauend eine Zugriffsmethode. Softwareentwickler und Datenbankadministratoren berücksichtigen außerdem Selektivität und Häufigkeit von Abfragen, wenn sie entscheiden, welche Indexe angelegt werden sollen.

Lernvideos zu Selektivität (Informatik)

Weiterlesen

Datenbanktabelle Eine Datenbanktabelle ist eine Sammlung verwandter Daten, die in einem strukturierten Format in einer Datenbank gespeichert sind. Sie besteht aus Spalten … Relationale Datenbank Eine relationale Datenbank ist eine digitale Datenbank, die zur elektronischen Datenverwaltung in Computersystemen dient und auf einem tabellenbasierten … Relationale Algebra In der Theorie der Datenbanken versteht man unter einer relationalen Algebra oder Relationenalgebra eine Menge von Operationen zur Manipulation von … Tupel (Informatik) In diversen Programmiersprachen bezeichnet „Tupel“ gemeinhin einen Listen-Datentyp, welcher über eine feste Länge verfügt und nach Definition nicht mehr … Selektion (Informatik) In der Relationalen Algebra ist die Selektion einer der fünf Operatoren, die in Relationalen Datenbanken eingesetzt werden. Kreuzprodukt Unter Vorwegnahme der Bilinearität des Kreuzprodukts (siehe Eigenschaften) lässt sich die rechte Seite ausmultiplizieren: a → × b → = a 1 b 1 ( e → 1 × e → … Konjunktion (Logik) Gelesen wird die Konjunktion zweier Aussagen A, B meist als „A und B“. In der klassischen Logik ist die Konjunktion zweier Aussagen „A und B“ genau dann wahr, … Softwareentwickler Ein Softwareentwickler (englisch software developer) ist eine Person, die an der Erstellung und Weiterentwicklung einer Software mitwirkt. Festplatte Unter einer Festplatte versteht man einen Bestandteil der Hardware, der der dauerhaften Speicherung digitaler Daten dient, was auf der Ebene der …