www.wikidata.de-de.nina.az
Selektivitat ist ein Mass das in der Informatik bei Datenbankabfragen auf Datenbanktabellen in relationalen Datenbankensystemen gebraucht wird sie bestimmt den Anteil der Datensatze die bei einer Abfrage nicht durch eine Selektionsbedingung aus der Ergebnismenge ausgefiltert werden relativ zur Gesamtzahl der Datensatze des Datenbestandes welcher der Abfrage zugrunde liegt Bei der am weitesten verbreiteten Abfragesprache fur relationale Datenbanken SQL werden Selektionsbedingungen in der WHERE Klausel der Abfrage spezifiziert Inhaltsverzeichnis 1 Definition 2 Beispiele 3 Abschatzung der Selektivitat bei DBMS 4 Starke vs schwache Selektivitat 5 EinzelnachweiseDefinition BearbeitenSelektivitat wird in der Literatur haufig mit s displaystyle sigma nbsp kleines Sigma bezeichnet und kann somit leicht mit dem Selektionsoperator der relationalen Algebra verwechselt werden 1 weshalb auch das Kurzel sel verwendet wird Formal bezeichnet die Selektivitat den Anteil der qualifizierenden Tupel Datensatze einer Datenbanktabelle die das Pradikat P displaystyle P nbsp ein Vergleichsausdruck der Selektion s displaystyle sigma nbsp dieser Abfrage erfullen Seien nun s P A displaystyle sigma P A nbsp die Anzahl der Datensatze die das Selektionspradikat P einer Datenbankabfrage erfullen und A displaystyle A nbsp die Anzahl der Datensatze der dieser Abfrage zugrunde liegenden Datenbanktabelle dann gilt folgende Formel zur Berechnung der Selektivitat sel 1 s e l P s P A A displaystyle sel P dfrac sigma P A A nbsp Bei einem Join zweier Datenbanktabellen B und C wird bei der Berechnung der Selektivitat der Anteil der Tupel die sich fur die Ergebnismenge qualifizieren relativ zur Gesamtzeilenzahl des Kreuzproduktes von B und C wiedergegeben 1 s e l B C B C B C B C B C displaystyle sel BC dfrac B bowtie C B times C dfrac B bowtie C B cdot C nbsp Da ein Selektionspradikat die Ergebnismenge gegenuber der abgefragten Datenmenge stets einschrankt ist die Selektivitat sel eines Selektionspradikates P ein Wert zwischen 0 und 1 kann also als Prozentsatz derjenigen Datensatze die bei einer Abfrage nicht durch das Selektionspradikat ausgefiltert werden relativ zur Gesamtzahl der Datensatze des Datenbestandes welcher der Abfrage zugrunde liegt interpretiert werden Beispiele BearbeitenEine relationale Datenbank habe folgende Tabelle KUNDEN mit 1000 Eintragen ID NAME1 Muller2 Schmitt3 Schulz 999 Schneider1000 MeierNun wird folgende Abfrage mit SQL gestellt select from kunden In diesem Fall ist die Selektivitat bei der obigen Abfrage gleich 1 da in der Abfrage keine Selektionsbedingung spezifiziert ist und von der zugrunde liegenden Datenbanktabelle bei der Generierung der Ergebnismenge keine Datensatze ausgefiltert werden so dass die Kardinalitat der Ergebnismenge und die der abgefragten Datenbanktabelle gleich sind s e l s P K U N D E K U N D E 1000 1000 1 displaystyle sel dfrac sigma P KUNDE KUNDE dfrac 1000 1000 1 nbsp Nun wird dieselbe Abfrage mit einer WHERE Klausel erganzt die eine Selektionsbedingung darstellt welche die Ergebnismenge durch Filtern der Datensatze in der abgefragten Tabelle einschrankt select from kunden where id lt 221 220 Datensatze der Tabelle KUNDEN passieren den Filter dieser Abfrage ihre Selektivitat ist somit 0 22 220 dividiert durch 1000 Schliesslich ist bei der Abfrage select from kunden where id gt 1000 die Ergebnismenge leer das heisst samtliche Datensatze des zugrunde liegenden Datenbestandes werden mittels des Selektionspradikats aus der Ergebnismenge ausgefiltert so dass die Selektivitat gleich 0 ist 0 dividiert durch 1000 Die absolute Zahl der Datensatze in der von einer Abfrage generierten Ergebnismenge spielt bei der Bestimmung der Selektivitat im Allgemeinen keine Rolle wie die folgende Abfrage zeigt select count from kunden where id lt 401 Hier wird von der Abfrage aufgrund der Aggregierung durch die SQL Funktion count nur ein Datensatz als Ergebnis generiert die Selektivitat der Abfrage ist aber 0 4 400 Datensatze passieren den Filter des Selektionspradikats und 400 dividiert durch 1000 ist 0 4 select from kunden where id 300 Das Pradikat ID 300 hat eine Selektivitat von 1 1000 0 001 da nur ein Satz von den 1000 vorhandenen Satzen der Tabelle ermittelt wird select from kunden where name Maier Hier muss berucksichtigt werden dass auch mehrere Kunden den Namen Maier tragen konnen Wenn es 5 Kunden mit diesem Namen gibt dann betragt die Selektivitat der Abfrage 5 1000 0 005 Abschatzung der Selektivitat bei DBMS BearbeitenViele Datenbankmanagementsysteme DBMS haben einen kostenbasierten Anfrageoptimierer der versucht zu einer Datenbankabfrage die optimale Zugriffsstrategie unter anderem anhand einer Abschatzung der Selektivitat der einzelnen Pradikate der Abfrage zu finden Die Selektivitat wird vom Anfrageoptimierer weil es zu aufwandig ware nicht exakt bestimmt sondern nur anhand von statistischen Daten abgeschatzt Zu den Statistiken die von einem DBMS erhoben werden zahlen zum Beispiel Angaben uber die Gesamtzeilenzahl einer Tabelle uber die Anzahl unterschiedlicher Werte in den Tabellenspalten Kardinalitat Anzahl der NULL Werte in einer Spalte etc Bei einem Pradikat der Form Spalte Wert kann vorausgesetzt dass in den Statistik Daten die Kardinalitat der betreffenden Spalte bekannt ist die Selektivitat dieses Pradikats mit s e l 1 c displaystyle sel dfrac 1 c nbsp abgeschatzt werden wobei c der Kardinalitat der Spalte entspricht Die Abschatzung der Selektivitat ist in diesem Fall korrekt falls eine Gleichverteilung der Werte in der betreffenden Spalte vorliegt Wenn mehrere einzelne Pradikate miteinander durch logische Operatoren verknupft werden oder ein einzelnes Pradikat negiert wird dann kann die Selektivitat der gesamten Bedingung aus der Abschatzung der Selektivitaten der einzelnen Pradikate berechnet werden seien dafur s e l 1 displaystyle sel 1 nbsp die Selektivitat des Pradikats P 1 displaystyle P 1 nbsp und s e l 2 displaystyle sel 2 nbsp die Selektivitat des Pradikats P 2 displaystyle P 2 nbsp Bei einer Verknupfung der beiden Pradikate mittels einer AND Verknupfung Konjunktion kann die Selektivitat der Verknupfung durch Multiplikation der Einzel Selektivitaten abgeschatzt werden s e l P 1 A N D P 2 s e l 1 s e l 2 displaystyle sel P 1 AND P 2 sel 1 sel 2 nbsp Bei einer OR Verknupfung Disjunktion kann die Selektivitat der Verknupfung durch Addition der Einzel Selektivitaten abgeschatzt werden Davon muss allerdings die Schnittmenge noch subtrahiert werden s e l P 1 O R P 2 s e l 1 s e l 2 s e l 1 s e l 2 displaystyle sel P 1 OR P 2 sel 1 sel 2 sel 1 sel 2 nbsp Wird ein Pradikat mit NOT negiert kann die Selektivitat durch Subtrahieren der Selektivitat von 1 abgeschatzt werden s e l N O T P 1 1 s e l 1 displaystyle sel NOT P 1 1 sel 1 nbsp Starke vs schwache Selektivitat BearbeitenWenn die Selektivitat hoch ist das heisst ihr Wert ist nahe oder gleich 1 dann spricht man von schwacher Selektivitat ist der Wert niedrig das heisst nahe oder gleich 0 dann spricht man von starker Selektivitat Die Grenze zwischen starker und schwacher Selektivitat ist fliessend In der Praxis ist es fur Softwareentwickler Datenbankadministratoren und den Anfrageoptimierer eines Datenbanksystems notwendig die Selektivitat einer Abfrage in starke und schwache Selektivitat kategorisieren zu konnen Um eine gute Performance bei einer Abfrage zu erzielen ist es wichtig die Anzahl der Datenblocke die von der Festplatte gelesen werden moglichst gering zu halten Bei Abfragen mit starker Selektivitat eignen sich andere Zugriffsmoglichkeiten auf die Daten der Festplatte als bei solchen mit schwacher Selektivitat Bei SQL Abfragen mit schwacher Selektivitat ist ein Scan der gesamten Tabelle Full Table Scan am effizientesten da durch ein Selektionspradikat nur wenige Datensatze der abgefragten Tabelle ausgefiltert werden qualifizieren sich sehr viele Datensatze fur die Ergebnismenge das bedeutet ein sehr grosser Prozentsatz der Datenblocke welche die Datensatze der abgefragten Tabelle speichern muss ohnehin von der Festplatte in den Hauptspeicher gelesen werden das zusatzliche Lesen von Datenblocken eines Datenbankindexes wurde in diesem Fall einen unnotigen Overhead bedeuten In Spezialfallen wenn ein Datenbankindex alle Daten enthalt die abgefragt werden kann anstatt eines Full Table Scans auch ein Full Index Scan vorgenommen werden Bei SQL Abfragen mit starker Selektivitat greift man am besten mittels eines passenden Datenbankindexes auf die Daten zu Wenn beispielsweise nur ein Datensatz der abgefragten Tabelle das Selektionspradikat der Abfrage erfullt dann ware es nicht effizient alle Blocke mit allen Datensatzen dieser Tabelle mittels eines Full Table Scans in den Hauptspeicher zu lesen Stattdessen mussen bei einem Indexzugriff nur sehr wenige Blocke gelesen werden das heisst einige wenige Indexblocke und von abgefragten Tabelle nur derjenige Block der den gesuchten Datensatz speichert Der Anfrageoptimierer versucht deshalb bei jeder Abfrage deren Selektivitat abzuschatzen und die optimale Zugriffsmethode auszuwahlen Entwickler und Datenbankadministratoren wiederum mussen mittels der Selektivitat und Haufigkeit von Abfragen entscheiden welche Indexe angelegt werden mussen deren sich der Anfrageoptimierer bei der Ausfuhrung der Abfrage dann bedienen kann Einzelnachweise Bearbeiten a b c Alfons Kemper Andre Eickler Datenbanksysteme Oldenbourg Verlag 2004 ISBN 3 486 25706 4 Seite 254 Abgerufen von https de wikipedia org w index php title Selektivitat Informatik amp oldid 224880801