DE112012004916T5 - Verbesserte Datenbankabfrage und Aufwandsschätzung - Google Patents

Verbesserte Datenbankabfrage und Aufwandsschätzung Download PDF

Info

Publication number
DE112012004916T5
DE112012004916T5 DE112012004916.0T DE112012004916T DE112012004916T5 DE 112012004916 T5 DE112012004916 T5 DE 112012004916T5 DE 112012004916 T DE112012004916 T DE 112012004916T DE 112012004916 T5 DE112012004916 T5 DE 112012004916T5
Authority
DE
Germany
Prior art keywords
tree
nodes
key
node
value
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE112012004916.0T
Other languages
English (en)
Inventor
Tom Kim
Firat Kart
Suresh Subramani
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Cloud Software Group Inc
Original Assignee
Tibco Software Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tibco Software Inc filed Critical Tibco Software Inc
Publication of DE112012004916T5 publication Critical patent/DE112012004916T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • G06F16/90335Query processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24534Query rewriting; Transformation
    • G06F16/24549Run-time optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2246Trees, e.g. B+trees
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9027Trees

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

Es werden Systeme und Verfahren beschrieben, die sich auf eine Datenbankabfrageoptimierung und Abfrageaufwandsschätzung beziehen. Der Ansatz wird im Kontext des Durchsuchens von ausgeglichenen und halbausgeglichenen Baumindizes, z. B. B-Bäume, B+-Bäume und R-B-Bäume, beschrieben. Der beschriebene Ansatz kann sowohl für einfache als auch zusammengesetzte Abfragen verwendet werden, und der beschriebene Ansatz kann für relationale Abfragen verwendet werden, d. h., wenn eine Variable kleiner oder größer als ein gewisser Wert ist und die Datenbank verwendet wird, um den Datensatz zu finden, der die Relation erfüllt. Darüber hinaus kann der beschriebene Ansatz für generalisierte N-äre Baumabfragen und Aufwandschätzungen verwendet werden.

Description

  • Querverweis auf verwandte Anmeldungen
  • Diese Patentanmeldung bezieht sich auf die provisorische Patentanmeldung 61/563,728 mit dem Titel ”Improved database query optimization and cost estimation”, eingereicht am 25. November 2011, und beansprucht deren Priorität, die hier durch Bezugnahme für alle Zwecke berücksichtigt ist.
  • Technisches Gebiet
  • Das hier offenbarte System und Verfahren beziehen sich auf die Datenbankabfrageoptimierung. Das System und Verfahren beinhaltet computerlesbare Anweisungen, die auf einem computerlesbaren Medium gespeichert sind, um eine Datenbankabfrage-Aufwandschätzung bereitzustellen und somit Abfragen weiter zu optimieren. Der Ansatz wird im Kontext des Durchsuchens von ausgeglichenen und halbausgeglichenen Baumindizes, z. B. B-Bäume, B+-Bäume und R-B-Bäume, beschrieben. Der beschriebene Ansatz kann sowohl für einfache als auch zusammengesetzte Abfragen verwendet werden, und der beschriebene Ansatz kann für relationale Abfragen verwendet werden, d. h., wenn eine Variable kleiner oder größer als ein gewisser Wert ist und die Datenbank verwendet wird, um den Datensatz zu finden, der die Relation erfüllt. Darüber hinaus kann der beschriebene Ansatz für generalisierte N-äre Baumabfragen und Aufwandschätzungen verwendet werden.
  • Hintergrund
  • Eine Abfrageoptimierungseinheit ist eine Komponente eines Datenbankverwaltungssystems, die versucht, die effizienteste Methode zur Durchführung einer Abfrage zu bestimmen. Die Optimierungseinheit berücksichtigt die möglichen Abfragepläne für eine bestimmte Abfrage und versucht zu bestimmen, welcher dieser Pläne der effizienteste sein wird. Aufwandbasierte Abfrageoptimierungseinheiten weisen jedem möglichen Abfrageplan einen geschätzten ”Aufwand” zu und wählen den Plan mit dem geringsten Aufwand aus. Aufwände werden verwendet, um den Laufzeitaufwand des Bewertens der Abfrage in Bezug auf die Anzahl von erforderlichen E/A-Operationen, die CPU-Anforderungen und andere, anhand der Datenbank bestimmten Faktoren zu schätzen.
  • Systeme, die Histogramme für die aufwandbasierte Abfrageoptimierung verwenden, sind bei einer höheren Auflösung mit Effizienzproblemen verbunden und sind bei einer niedrigeren Auflösung fehleranfällig. Es besteht ein Bedarf an einer zuverlässigen Aufwandsschätzung ohne die mit Histogrammen verbundenen Effizienz- und Fehlerpönalen.
  • Kurzfassung
  • Das offenbarte System und Verfahren stellt einen Ansatz zum schnellen und genauen Planen der Bewertungsreihenfolge für Abfragen bereit. Um Abfragen einer Datenbank effizient durchzuführen, können Indizes von einem Datenbankadministrator festgelegt und vorberechnet werden. Um Bereichsabfragen zu unterstützen, wird für gewöhnlich ein ausgeglichener oder halbausgeglichener Baum verwendet. Der ausgeglichene Baum kann mit einer Aufwandsschätzung für Unterabfragen versehen werden, indem der Baum wie bei Durchführung der Abfrage traversiert wird und ein laufender Schätzwert der Anzahl von Einträgen gehalten wird, die kleiner oder größer als ein spezifizierter Schlüssel sind.
  • Das offenbarte System und Verfahren stellen darüber hinaus einen Ansatz zum schnellen und genauen Schätzen des Aufwands für Klauseln zusammengesetzter Abfragen durch Nutzen bestehender ausgeglichener Baumindizes bereit. Das System und Verfahren stellen darüber hinaus einen Ansatz zum Handhaben von doppelten Einträgen in ausgeglichenen Baumindizes bereit.
  • Kurze Beschreibung der Zeichnungen
  • Es wird nun auf die folgende ausführliche Beschreibung der bevorzugten Ausführungsformen unter Zusammenschau mit den beiliegenden Zeichnungen Bezug genommen. Darüber hinaus wird betont, dass einige Komponenten in gewissen FIGUREN für eine einfachere Erörterung ausgelassen wurden.
  • Es wird nun auf die folgenden Beschreibungen in Zusammenschau mit den beiliegenden Zeichnungen Bezug genommen, in denen:
  • 1 ein schematisches Schaubild eines beispielhaften Systems für eine verbesserte Abfrageaufwandsschätzung gemäß der vorliegenden Offenbarung ist;
  • 2 ein schematisches Schaubild ist, das eine Traversierung einer beispielhaften Baumstruktur gemäß der vorliegenden Offenbarung zeigt;
  • 3 ein schematisches Schaubild ist, das eine Traversierung einer beispielhaften unausgeglichenen Baumstruktur gemäß der vorliegenden Offenbarung zeigt;
  • 4 ein beispielhaftes Verfahren für eine verbesserte Abfrageaufwandsschätzung gemäß der vorliegenden Offenbarung zeigt;
  • 5 einen beispielhaften Pseudocode für eine verbesserte Abfrageaufwandsschätzung gemäß der vorliegenden Offenbarung zeigt;
  • Die 6A–B einen beispielhaften Baum für eine verbesserte Abfrageaufwandsschätzung mit einem einzelnen Schlüssel und einer einzelnen Abfrage gemäß der vorliegenden Offenbarung zeigen;
  • 7 ein beispielhafter Baum für eine verbesserte Abfrageaufwandsschätzung mit einem einzelnen Schlüssel und zwei Abfragen gemäß der vorliegenden Offenbarung ist;
  • 8 ein schematisches Schaubild ist, das einen unausgeglichenen Baum gemäß der vorliegenden Offenbarung zeigt;
  • 9 ein schematisches Schaubild ist, das einen weiteren unausgeglichenen Baum gemäß der vorliegenden Offenbarung zeigt;
  • 10 ein beispielhafter N-ärer Baum (ein 3-2-Baum) ist, bei dem der offenbarte Aufwandsschätzungsansatz angewandt wurde; und
  • 11 ein generalisierter Pseudocodeansatz gemäß dem in 3 Gezeigten ist, jedoch an eine Anwendung auf N-äre Bäume angepasst.
  • Diese beispielhaften FIGUREN und Ausführungsformen stellen gemeinsam mit den beispielhaften FIGUREN, die im Text dieser provisorischen Patentanmeldung enthalten sind, eine geschriebene ausführliche Beschreibung der Erfindungen bereit, die durch sämtliche Ansprüche ausgeführt sind, die aus der vorliegenden Anmeldung hervorgehen. Diese beispielhaften FIGUREN und Ausführungsformen sollen nicht verwendet werden, um jedwede Ansprüche einzuschränken, die in einem Patent aus der vorliegenden Anmeldung schließlich behandelt werden.
  • Ausführliche Beschreibung
  • Ansätze zur Abfrageoptimierung versuchen, die effizienteste Methode zur Durchführung einer Abfrage zu bestimmen, indem sie mehrere mögliche Abfragepläne für eine bestimmte Eingabeabfrage berücksichtigen und bestimmen, welcher dieser Pläne der effizienteste wäre. Aufwandbasierte Abfrageoptimierungseinheiten weisen jedem möglichen Abfrageplan einen geschätzten ”Aufwand” zu und wählen den Plan mit dem geringsten Aufwand aus. Aufwände werden verwendet, um den Laufzeitaufwand des Bewertens der Abfrage in Bezug auf die Anzahl von erforderlichen E/A-Operationen, die CPU-Anforderungen und andere Faktoren zu schätzen, die durch die Systeme bestimmt werden, in denen solche Optimierungseinheiten ausgeführt werden.
  • Bisherige Datenbanksysteme verwenden häufig Histogramme, um Abfrageaufwandsschätzungen zu berechnen, da solche Histogramme mit einem minimalen Arbeitsaufwand verwaltet werden können und mit einem geringen Speicherbedarf verbunden sind. Ein Histogramm besteht aus tabellarischen Häufigkeiten, die als benachbarte Rechtecke gezeigt sind, die über diskrete Intervalle (Bins) aufgebaut sind, mit einer Fläche gleich der Häufigkeit der Beobachtungen im Intervall. Die Höhe eines Rechtecks ist gleich der Häufigkeitsdichte des Intervalls, d. h. der Häufigkeit geteilt durch die Breite des Intervalls, und die Gesamtfläche des Histogramms ist gleich der Gesamtanzahl von Proben.
  • Leider können solche Histogrammansätze aus dem Stand der Technik zu Kostenschätzungen führen, die deutlich fehlerhaft sind, da ihre Genauigkeit durch die Histogrammgranularität eingeschränkt ist. Somit gibt es eine Spannung zwischen der Größe von Bins und dem Aufwand für die Abfrage. Je größer die Bins sind, desto geringer ist der Abfrageaufwand, desto größer jedoch das Fehlerpotenzial. Bei kleineren Bins ist das Fehlerpotenzial stark verringert, jedoch kann der Aufwand für die Abfrage stark erhöht sein. Ein Beispiel: Man geht von einer Million Gesamtproben für Einheiten 1, 2, 3, 4 und 5 und nur 10 Gesamtproben für Einheiten 6, 7, 8, 9 und 10 aus. Wenn die Histogramm-Bin-Größe 10 ist und nur 1 Bin für die Einheiten 1 bis 10 vorhanden ist, so gibt jede Abfrage für einen Schlüssel für beliebige dieser Einheitenwerte eine Zählung von 1,000,010 zurück. Dies ist für einen Schlüssel für Einheitenwerte 1 bis 5 angemessen genau, für einen Schlüssel für Einheitenwerte 6 bis 10 jedoch äußerst ungenau. Das vorliegende System und Verfahren stellen ein effizienteres und genaueres System zum Indexieren und Suchen nach Indexwerten als das oben beschriebenen Histogrammverfahren bereit.
  • 1 ist ein schematisches Schaubild eines beispielhaften Systems 100 für eine verbesserte Abfrageaufwandsschätzung. Das System 100 umfasst einen Prozessor 104 in Verbindung mit einer Anwendung 102, einen Hauptspeicher 106 und einen sekundären Speicher 110. Eine Datenbank 108 befindet sich innerhalb des Hauptspeichers 106, und die Datenbank 108 kann eine speicherinterne Datenbank oder ein Hauptspeicher-Datenbanksystem sein. Das beschriebene Verfahren und System verwenden einen ausgeglichenen oder halbausgeglichenen Baumindex der Datenbank für Datenbankabfragen und Aufwandsschätzung. Solche baumstrukturierten Indizes könnten in einem plattenbasierten Datenbanksystem aufgrund mehrerer Plattenlesevorgänge zu aufwändig sein, dieser Ansatz kann in einem speicherinternen Datenbanksystem hingegen insbesonders effektiver sein. Ein Vorteil des Verwenden eines solchen baumstrukturierten Ansatzes besteht darin, dass er im nicht im Allgemeinen ein Abstraktion der Datenbankinformationen ist, sondern tatsächlich eine effektive Reihung aller Daten in einer Datenbank, die Abfragen und Aufwandsschätzwerte fördert, wogegen Histogramme aus dem Stand der Technik die Daten unvermeidbar in Bereiche mit den Häufigkeitsindikatoren aufschlüsseln. Somit ermöglicht dieser neue Ansatz viel genauere Schätzwerte.
  • Das System 100 kann die Anwendung 102, den Prozessor 104, den Hauptspeicher 106, die Datenbank 108 und den sekundären Speicher 110 umfassen, und kann eine beliebige geeignete Recheneinheit oder -maschine sein, die einen Prozessor und einen Speicher umfasst, um die beschriebene Funktionalität durchzuführen.
  • Die Anwendung 102, der Prozessor 104, der Hauptspeicher 106, die Datenbank 108 und der sekundäre Speicher 110 können eine oder mehrere Maschinen, Workstations, Laptops, Blade-Server, Server-Farmen und/oder eigenständige Server umfassen. Die Anwendung 102, der Prozessor 104, der Hauptspeicher 106, die Datenbank 108 und der sekundäre Speicher 110 können eine beliebige Hardware und/oder Steuerlogik beinhalten, die verwendet wird, um Informationen an ein oder mehrere, in 1 gezeigte Elemente und von diesen zu übertragen. Beispielsweise können Die Anwendung 102, der Prozessor 104, der Hauptspeicher 106, die Datenbank 108 und der sekundäre Speicher 110 so betreibbar sein, dass sie Daten unterschiedlicher Typen empfangen und verarbeiten, die über unterschiedliche Protokolle oder Formate übertragen werden können. Andere Elemente in 1 können ebenfalls Hardware und/oder eine Steuerlogik umfassen, um Informationen an ein oder mehrere, in 1 gezeigte Elemente und von diesen zu übertragen.
  • Abfrageoptimierungseinheit für verbesserte Abfragen und Aufwandsschätzung
  • Es werden hier ein System und Verfahren für verbesserte Abfragen und Abfrageaufwandsschätzung beschrieben. Die Abfrageoptimierungseinheit wird durch computerlesbare Anweisungen umgesetzt, die in einem computerlesbaren Medium gespeichert sind, z. B. im Hauptspeicher 106 und/oder im sekundären Speicher 110. Wenn die Anweisungen auf dem Prozessor 104 ausgeführt werden, wird ein optimiertes Verfahren zum Durchführen einer Abfrage ausgeführt. Im Kontext einer zusammengesetzten Abfrage erstellt die Abfrageoptimierungseinheit einen Plan, der die zusammengesetzte Abfrage schneller als lediglich der ausgedrückten Reihenfolge der zusammengesetzten Abfrage folgend durchführt. Die hier ausgedrückten Techniken sind auch bei der Durchführung einer Optimierung für einfache (mit einer Variable) relationale Abfragen effektiv. Im Vergleich zu einem Histogrammansatz ermöglicht das Bereitstellen eines ausgeglichenen oder halbausgeglichenen Baumindexes sogar bei einer einfachen relationalen Abfrage eine gleichzeitige Traversierung der Baumstruktur (die alle indexierten Daten enthält) und Schätzen der Werte, die relational geringer oder größer als der getestete Schlüssel sind.
  • Die nachstehende einfache ausgeglichene Baumstruktur zeigt im Allgemeinen, wie eine relationale Abfrage in einem ausgeglichenen oder halbausgeglichenen Baumindex erfolgt. Solche Baumstrukturen sind so konzipiert, dass sie in Wege abzweigen, die eine organisierte Traversierung bereitstellen. Beispielsweise ist nachstehend ein einfacher Baum für den Satz der Zahlen 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18 (14 fehlt in einer vollständigen Sequenz von 1–18) angeführt. Es gibt diverse Algorithmen, um Baumindizes auf die erfolgte Weise auszugleichen, so dass eine geordnete Traversierung dieser gefördert wird. Das nachstehende Beispiel beinhaltet darüber hinaus eine beispielhafte Traversierung (in der dunklen Pfeillinie gezeigt) für einen ”Schlüssel” < 8. An jedem Knoten kann der Schlüssel getestet werden, und ein Schätzwert von Punkten, die den Datensatz erfüllen, kann auf der Grundlage bekannter Tabelleneigenschaften erzeugt werden. In diesem Fall kann bei einem perfekt ausgeglichenen Baum, der zwischen zwei unteren ”Blättern” in der dritten und vierten Position auf der dritten Ebene endet, relativ schnell berechnet werden, dass ungefähr 6 Gesamtproben auf der ”geringer als” bzw. ”LT”-Seite des Baums sind und ungefähr 9 Gesamtproben auf der ”größer als” bzw. ”GT”-Seite des Baums sind. (Diese Zahl ist leicht versetzt, da technisch gesehen eine ”Übereinstimmung” bei 8 vorlag, also wäre 8 nicht auf der ”GT”-Seite des Baums gewesen).
  • 2 ist ein schematisches Schaubild, das eine beispielhafte Baumstruktur 200 und eine ”Schlüssel < 8”-Traversierung der beispielhaften Baumstruktur zeigt.
  • Um Abfragen einer Datenbank effizient durchzuführen, können Indizes von einem Datenbankadministrator über die Anwendung 102 festgelegt werden. Diese Indizes befinden sich in einem Prozess, in dem sie ausgeglichen und wieder ausgeglichen werden, um bekannte Charakteristika und Strukturen aufrechtzuerhalten, und diese Strukturen umfassen die in diesem Dokument erörterten Baumstrukturen, z. B. Rot-Schwarz-Baum, B-Baum, B+-Baum usw. Die Ausgeglichenheit besteht in der Optimierung der Berechnungszeit bei gleichzeitiger Beibehaltung der Ausgeglichenheit solcher Indizes und Minimierung der Abfragezeit. Anders ausgedrückt ist für eine optimale Suche und Schätzung ein perfekt ausgeglichener Baumindex wünschenswert (wie im oben gezeigten Beispiel), das Beibehalten eines perfekt ausgeglichenen Baums bedarf jedoch einen großen Rechenaufwands. Stattdessen wird zugelassen, dass Bäume zumindest teilweise unausgeglichen werden (innerhalb gewisser festgelegter Parameter), bevor sie wieder ausgeglichen werden, um die Last in Zusammenhang mit dem Beibehalten der Ausgeglichenheit der Bäume bei gleichzeitigem Halten der Bäume innerhalb einer gewissen Grenzstruktur zu verringern.
  • Wenn ein Baum unausgeglichen wird, kann die Tiefe einer Seite des Baums womöglich nicht der Tiefe der anderen Seite des Baums entsprechen und die Länge des Baums variiert sodann je nach ausgewähltem Weg. Die Unausgeglichenheit des Baums führt dann zu fehlerhaften Schätzungen, wenn Annahmen für einen ausgeglichenen Baum verwendet werden. Geht man vom obigen Beispiel aus, entfernt jedoch einige der Datenpunkte, um dem Baum unausgeglichen zu machen: Wenn der Baum wie oben erörtert ausgeglichen worden wäre, würde die ”LT”-Seite für eine ”Schlüssel < 8”-Traversierung durch den Index (wie oben) zu einer Anzahl von ”LT”-Einträgen von ungefähr 6 und einer Anzahl von ”GT”-Einträgen von ungeführ 9 führen. Da dieser Baum jedoch unausgeglichen ist, sind die Zahlen versetzt und die Zahl der GT-Seite ist insbesonders versetzt, da nur 4 Einträge auf der ”GT”-Seite der Traversierungszeile vorhanden sind.
  • 3 ist ein schematisches Schaubild, das eine beispielhafte unausgeglichene Baumstruktur 300 und eine ”Schlüssel < 8”-Traversierung der Baumstruktur 300 zeigt. Wie in 3 gezeigt, sollte dieser Baum für eine optimale Traversierung und Schätzung wieder ausgeglichen werden, und der Grad der zugelassenen Unausgeglichenheit steht mit dem Typ der verwendeten Baumstruktur in Beziehung.
  • Für den Zweck einiger der Erörterungen in dieser Anmeldung wird von einem Rot-Schwarz-Baum bzw. RB-Baum ausgegangen, die hier beschriebenen Grundsätze können jedoch auf andere Baumtypen angewandt werden, z. B. ausgeglichene binäre Bäumen, halbausgeglichene binäre Bäume und andere Bäume. Die Details darüber, wie solche Bäume ausgeglichen und beibehalten werden, sind für die Zwecke dieses Dokuments nicht wichtig, diesbezügliche Details sind jedoch hinlänglich bekannt und fallen in das Wissen des durchschnittlichen Fachmanns auf dem Gebiet. Grundsätzlich sind solche Bäume dadurch gekennzeichnet, dass sie angemessen ausgeglichen und demgemäß für eine Abfrageaufwandsschätzung angemessen effektiv sind. Bei einem Rot-Schwarz-Baum beispielsweise ist der Weg von der Wurzel des Baums zum am entferntesten gelegenen Blatt nicht größer als zweimal der Weg von der Wurzel des Baum zum nächstgelegenen Blatt, wodurch der Baum angemessen ausgeglichen ist. Die Höhe von ausgeglichenen oder halbausgeglichenen binären Bäumen ist im Allgemeinen ein logarithmischer Wert, das heißt, dass die Anzahl von Ebenen im Baum im Allgemeinen gering ist, da sie in Bezug auf die Anzahl von Knoten im Baum logarithmisch ist. Diese Eigenschaften solcher ausgeglichenen oder halbausgeglichenen binären Bäumen können aus diversen Gründen für eine Abfrageaufwandsschätzung wichtig sein. Beispielsweise kann die Aufwandsschätzung kosteneffektiver sein, da der Baum nicht zu hoch sein kann, und die Schätzwerte können aufgrund der relativ gesicherten Ausgeglichenheit angemessen genau sein.
  • Jeder Knoten in einem ausgeglichenen binären Baum hat zwei Blattknoten – einen rechten Blattknoten und einen linken Blattknoten. Da jeder Ebene des Baums in ihrer Größe eingeschränkt ist, gibt es für die Anzahl von vorhandenen Knoten links und rechts des aktuellen Knotens obere und untere Grenzen. Bei der Traversierung des Baums wird ein Verhältnis von Knoten links des aktuellen Wegs zu Knoten rechts des aktuellen Wegs geschaffen, und dieses Verhältnis kann dann auf die tatsächliche Baumgröße angewandt werden. Aus diesem Grund ist es möglich, die Anzahl von Knoten links auf jeder Ebene und die Anzahl von Knoten rechts auf jeder Ebene zu schätzen und eine laufende Gesamtzahl der Knoten, die geringer als (LT) ein Schlüssel sind, und der Knoten, die größer als (GT ein Schlüssel sind, beizubehalten. Nachdem der Baum traversiert wurde, ist es möglich, die Anzahl von Knoten, die geringer als ein Schlüssel sind, und die Anzahl von Knoten, die größer als ein Schlüssel sind, zu summieren. Mit den Geringer-als- und Größer-als-Summen ist es möglich, die Anzahl der potenziellen Übereinstimmungen in einem linken Unterbaum und einem rechten Unterbaum für eine bestimmte Abfrage auf der Grundlage der Größe des Baums zu schätzen.
  • Bei einem Indexbaum, z. B. einem ausgeglichenen binären Baum, kann eine Aufwandsschätzung der Unterabfragen berechnet werden, indem der Baum wie bei einer Durchführung der Abfrage traversiert wird und gleichzeitig ein laufender Schätzwert der Anzahl von Knoten (Einträge) gehalten wird, die geringer als und größer als der festgelegte Schlüssel sind. Um eine genaue Kostenaufwandsschätzung durchzuführen, kann der gesamte Baum traversiert werden, sogar wenn der festgelegte Schlüssel auf einer höheren Ebene des Baums zu finden ist. Es ist darüber hinaus eine ”Normalisierung” möglich, um eine Aufwandsschätzung auf der Grundlage der relativen Zählung von Geringer-als- und Größer-als-Schlüsseln und durch Normalisieren dieses Verhältnisses in Bezug auf die Gesamtgröße des Baums zu erhalten, unabhängig davon, ob der Baum während des Prozesses des Suchens nach einer ”Übereinstimmung” für den Schlüssel zur Gänze traversiert wird.
  • Verbesserte Aufwandsschätzung für zusammengesetzte Abfragen
  • Neben dem oben beschriebenen vorteilhaften Ansatz des Verwendens von Baumindizes für effiziente Abfragen durch Aufwandsschätzung und einfache relationale Abfragen von Datenbanken kann der oben beschriebene Ansatz äußerst vorteilhaft genutzt werden, um zusammengesetzte Abfragen von Datenbanken effizienter zu machen.
  • Eine zusammengesetzte Abfrage ist eine Abfrage, die aus mehreren Unterabfragen zusammengesetzt ist, die durch Operatoren verbunden sind. Beispielsweise kann eine zusammengesetzte Abfrage ”A < 100 AND B < 100” sein. Wenn Indizes für A und B und eine Million Einträge vorhanden sind, die ”A < 100” erfüllen, aber nur 10 Einträge, die ”B < 100” erfüllen, kann das Berechnen der zusammengesetzten Abfrage mit einem Indexscan sehr ineffizient sein. Das Berechnen von ”A < 100” und das Durchführen eines Indexscans am Ergebnis für ”B < 100” erfordert, dass der letztere Scan die eine Million Einträge durchsucht, die ”A < 100” erfüllen. Im Gegensatz dazu erfordert das Berechnen von ”B < 100” und das Durchführen eines Indexscans am Ergebnis für ”A < 100” lediglich, dass der letztere Scan die 10 Einträge durchsucht, die ”B < 100” erfüllen. Bei dem Beispiel ”A < 100 AND B < 100” können getrennte Indizes für die Abfragen A und B vorliegen und jede Abfrage kann einen Schlüssel aufweisen, in diesem Fall ”< 100 for both A and B”. Da die hier beschriebenen Ansätze derart effizient ausgeführt werden können, um eine Aufwandsschätzung für sowohl die ”A”- als auch die ”B”-Schlüsselabfragen zu erhalten, kann die bei der Berechnung der zusammengesetzten Abfrage zu befolgende Reihenfolge schnell bestimmt werden.
  • Beschreibung des Verfahrens in Pseudocode- und Ablaufplanformaten
  • 4 ist ein beispielhafter Prozess 400 für eine verbesserte Abfrageaufwandsschätzung. 5 ist ein beispielhafter Pseudocode 500 des Prozesses von 4 für eine verbesserte Abfrageaufwandsschätzung. Um den Aufwand für eine Abfrage am besten zu schätzen, ist es vorteilhaft, wenn der Baum zumindest teilweise ausgeglichen ist, da dies eine Schätzung der Anzahl von Einträgen links und rechts der aktuellen Knotenposition auf jeder Ebene des Baums ermöglicht – zumindest innerhalb der Grenzen der Baumausgleichung. Je ausgeglichener der Baum ist, desto besser kann die Aufwandsschätzung der Abfrage sein. Um eine bessere Schätzung des Abfrageaufwands zu erhalten, normalisiert der Prozess 400 bei beschriebenen Ausführungsformen die Anfangsberechnungen in Bezug auf die tatsächliche Größe des Baums, was an mehr Bedeutung gewinnen kann, wenn mehrere Durchläufe des Baums in einer einzelnen Gleichung kombiniert werden, wie nachstehend ausführlicher beschrieben.
  • Bei Aktion 402 beginnt der Prozess 400 für eine verbesserte Abfrageaufwandsschätzung. Bei Aktion 404 kann ein Schlüssel empfangen werden, wobei der Prozess 400 die Aufwandsschätzung geringer als oder größer als einen Wert berechnet. Es kann ein Index mit einer Abfrage (z. B. A < 100), ein Index mit zwei Unterabfragen (z. B. A > 50 AND A < 400) oder es können zwei Indizes mit Unterabfragen (z. B. A < 100 AND B < 100) vorliegen. Bei Aktion 406 kann ein Ganzzahlenwert für LT und ein Ganzzahlenwert für GT jeweils auf 0 gesetzt werden. LT ist ein Schätzwert für die Anzahl von Einträgen, die geringer als der Schlüssel sind (Schlüssel obere Grenze). GT ist ein Schätzwert für die Anzahl von Einträgen, die größer als der Schlüssel sind (Schlüssel untere Grenze). Bei Aktion 408 beginnt die Traversierung des Baums an einem Stammknoten im Baum und ein aktueller Knoten wird auf den Stammknoten gesetzt.
  • Bei Entscheidung 410 kann bestimmt werden, ob der aktuelle Knoten ein Null-Knoten ist. Wenn der aktuelle Knoten der Stammknoten ist, ist der aktuelle Knoten im Baum nicht null. Wenn der aktuelle Knoten nicht null ist, kann bei Entscheidung 412 bestimmt werden, ob der Wert des Schlüssels geringer als der Wert des aktuellen Knotens ist. Wenn der Wert des Schlüssels geringer als der Wert des aktuellen Knotens ist, wird der aktuelle Knoten bei Aktion 414 aktualisiert, so dass der neue aktuelle Knoten auf den linken Blattknoten des vorherigen aktuellen Knotens gesetzt wird, der LT-Wert wird aktualisiert, so dass der neue LT-Wert zweimal der alte LT-Wert ist, und der GT-Wert wird aktualisiert, so dass der neue GT-Wert zweimal der alte GT-Wert plus 1 ist. Interne Zählungen werden darüber hinaus wie folgt aktualisiert: lt_count + = It; gt_count + = gt. Der Prozess 400 kehrt dann zur Entscheidung 410 zurück, um zu bestimmen, ob der neue aktuelle Knoten null ist.
  • Wenn der Wert des Schlüssels größer als der Wert des aktuellen Knotens ist, wird der aktuelle Knoten bei Aktion 416 aktualisiert, so dass der neue aktuelle Knoten auf den rechten Blattknoten des vorherigen aktuellen Knotens gesetzt wird, der LT-Wert wird aktualisiert, so dass der neue LT-Wert zweimal der alte LT-Wert plus 1 ist, und der neue GT-Wert wird aktualisiert, so dass der neue GT-Wert zweimal der alte GT-Wert ist. Interne Zählungen werden darüber hinaus wie folgt aktualisiert: lt_count + = It; gt_count + = gt. Der Prozess 400 kehrt dann zur Entscheidung 410 zurück, um zu bestimmen, ob der neue aktuelle Knoten null ist.
  • Nach Aktion 414 oder 416, wenn der Prozess versucht, den aktuellen Knoten zu aktualisieren und kein Blattknoten links oder rechts des aktuellen Knotens vorhanden ist, wird der aktuelle Knoten auf null gesetzt. Da der Baum ausgeglichen ist, kann eine angemessene Schätzung der Größe des Baums durchgeführt werden, nachdem ein Null-Knoten gefunden wurde, und darüber hinaus kann eine angemessene Schätzung des Aufwands für die Abfrage durchgeführt werden. Wenn der aktuelle Knoten null ist, werden der aktuelle lt_count- und der aktuelle gt_count-Wert summiert. Wenn die Summe nicht 0 ist, werden die Ergebnisse bei Aktion 420 normalisiert und der LT-Wert wird aktualisiert, so dass der neue LT-Wert der alte LT-Wert mal Baumgröße geteilt durch die Summe ist, und der GT-Wert wird aktualisiert, so dass der neue GT-Wert der alte GT-Wert mal Baumgröße geteilt durch die Summe ist. Bei Aktion 422 werden die neuen LT- und die neuen GT-Werte zurückgegeben, und der Aufwand für die Abfrage kann auf der Grundlage der Baumgröße geschätzt werden.
  • 6A ist ein beispielhafter Baum 600 für den Prozess von 4 für eine verbesserte Abfrageaufwandsschätzung mit einem einzelnen Index und einer einzelnen Abfrage. Als Beispiel kann der Baum 600 für eine einzelne Abfrage für ”A < 100” sein, wobei der Schlüssel A = 100 ist. Wie aus 6A ersichtlich, sind die LT- und GT-Wert in der oberen Ebene des Baums am Stammknoten beide auf 0 gesetzt.
  • Auf der nächsten Ebene wird der aktuelle Knoten beim Traversieren des Baums 600, da der Schlüssel geringer als der Schlüssel des aktuellen Knotens ist, zum linken Blattknoten des Stammknoten, wird der LT-Wert auf 0 aktualisiert (0·2 + 0 = 0) und wird der GT-Wert auf 1 aktualisiert (0·2 + 1 = 1). Auf der ersten Ebene unter dem Stammknoten schätzen die LT- und GT-Werte, dass keine Knoten geringer als der Schlüssel und ein Knoten größer als der Schlüssel für die Abfrage A < 100 vorhanden sind bzw. ist.
  • Auf der nächsten Ebene wird der neue aktuelle Knoten beim Traversieren des Baums 600, da der Schlüssel größer als der Schlüssel des aktuellen Knotens ist, zum rechten Blattknoten des alten Stammknotens, wird der LT-Wert auf 1 aktualisiert (0·2 + 1 = 1) und wird der GT-Wert auf 2 aktualisiert (1·2 + 0 = 2). Auf der zweiten Ebene unter dem Stammknoten schätzen die LT- und GT-Werte, dass ein Knoten geringer als der Schlüssel und zwei Knoten größer als der Schlüssel für die Abfrage A < 100 vorhanden ist bzw. sind.
  • Auf der nächsten Ebene wird der neue aktuelle Knoten beim Traversieren des Baums 600, da der Schlüssel größer als der Schlüssel des aktuellen Knotens ist, zum rechten Blattknoten des alten Stammknotens, wird der LT-Wert auf 3 aktualisiert (1·2 + 1 = 3) und wird der GT-Wert auf 4 aktualisiert (2·2 + 0 = 4). Auf der dritten Ebene unter dem Stammknoten schätzen die LT- und GT-Werte, dass drei Knoten geringer als der Schlüssel und vier Knoten größer als der Schlüssel für die Abfrage A < 100 vorhanden sind. In diesem Fall wurde eine ”Übereinstimmung”, wie gezeigt, auf der dritten Ebene gefunden, d. h., der Knoten ”100” befand sich auf dieser Ebene. Zu diesem Zeitpunkt wäre der Beziehungsschätzwert jedoch unvollständig (und ungenau), da eine gesamte Ebene unter dem Stammknoten ungeprüft bleibt. In diesem Kontext und in vielen anderen Schätzungskontexten wird ein Normalisierungsschritt verwendet, um einen genaueren Schätzwert bereitzustellen.
  • Der Normalisierungsprozess ist unter dem Baum formelhaft dargestellt. Die Gesamtbaumgröße beträgt in diesem Fall ”31”. Die Summenzählung auf Ebene 3 beträgt ”11” (4 + 7). Um eine normalisierte Ebene zu erhalten, so dass die ”fehlende” Ebene berücksichtigt wird, wie gezeigt, wird der linke Zählungs-LT von 4 (die ursprüngliche linke Summenzählung) mit 31/11 multipliziert, um einen LT-Schätzwert von 11,27 zu erhalten, wie gezeigt. Die GT-Zählung von 7 wird anhand der gleichen Logik mit 31/11 multipliziert, um einen Gesamtschätzwert von 19,72 zu erhalten.
  • 6B zeigt einen ähnlichen Prozess, jedoch wurde eine Übereinstimmung nicht auf Ebene 3 gefunden. Der Ansatz ist auf die auf Ebene 3 durchgeführte Berechnung aufgebaut, wobei eine Berechnung auf Ebene 4 durchgeführt wird. Die Formeln sind die gleichen und werden auf diese nächste Ebene angewandt. In diesem Fall wird der Normalisierungsprozess immer noch verwendet, aber da der Baum ausgeglichen und zur Gänze traversiert ist, hat der Normalisierungsprozess eine viel geringere Wirkung in Bezug auf die laufende Zählung, die durch Traversieren des Baums erhalten wurde.
  • Nach Traversieren des Baums kann ein laufender Schätzwert für sowohl die LT- als auch die GT-Wert in der Hauptspeicherdatenbank 108 (unter Bezugnahme auf 1) gespeichert werden, so dass nicht nur die Schätzung für ”A < 200” bereits berechnet sein wird, sondern auch die Schätzung für ”A > 100”, wenn eine Abfrage ”A > 100” aufgerufen wird.
  • Vorteilhafterweise können die berechneten und gespeicherten LT- und GT-Werte danach künftig verwendet werden, um eine zusammengesetzte Anfrage neu zu reihen, wenn die Unterabfragen der zusammengesetzten Abfrage unterschiedliche Indizes enthalten (z. B. A < 100 AND B < 100). Nachdem die Bäume für sowohl A als auch B traversiert und die Schätzungen berechnet wurden, kann der Prozessor 104 (unter Bezugnahme auf 1) die zusammengesetzte Abfrage ”B < 100 AND A < 100” neu reihen, wenn die Unterabfrage ”B < 100” weniger Einträge hat, die mit der Abfrage übereinstimmen, als es Einträge gibt, die mit der Unterabfrage ”A < 100” übereinstimmen. Dies kann dabei helfen, sowohl die Effizienz als auch die Genauigkeit des Systems 100 (unter Bezugnahme auf 1) zu verbessern.
  • 7 ist ein beispielhafter Baum 700 für den Prozess von 4 für eine verbesserte Abfrageaufwandsschätzung mit einem einzelnen Index und zwei Abfragen. Als Beispiel kann der Baum 700 für einen einzelnen Index mit zwei Unterabfragen für ”A > 50 UND A < 200” vorliegen, wobei der Schlüssel unterer Grenze A = 50 und der Schlüssel oberer Grenze A = 200 ist. Mit einem einzelnen Index und zwei Unterabfragen kann der Baum 700 zweimal traversiert werden, jeweils einmal für jeden Schlüssel. Wie in 7 gezeigt, sind die LT- und GT-Werte auf der oberen Ebene des Baums beide am Stammknoten 701 für beide Traversierungen des Baums 700 auf 0 gesetzt.
  • Zunächst wird der Baum 700 für eine untere Grenze 702, d. h. A > 50, traversiert. Auf der ersten Ebene abwärts vom Stammknoten 701 wird der aktuelle Knoten beim Traversieren des Baums 700, da der Schlüssel größer als der Schlüssel des aktuellen Knotens ist, zum rechten Blattknoten des Stammknotens, wird der LT-Wert auf 1 (0·2 + 1 = 1) aktualisiert und wird der GT-Wert auf 0 (0·2 = 0) aktualisiert. Auf der ersten Ebene unter dem Stammknoten schätzen die LT- und GT-Werte, dass ein Knoten geringer als der Schlüssel und kein Knoten größer als der Schlüssel für die Abfrage A > 50 vorhanden ist.
  • Auf der nächsten Ebene wird der neue aktuelle Knoten beim Traversieren des Baums 700, da der Schlüssel geringer als der Schlüssel des aktuellen Knotens ist, zum linken Blattknoten des alten aktuellen Knotens, wird der LT-Wert auf 2 aktualisiert (1·2 = 2) und wird der GT-Wert auf 1 aktualisiert (0·2 + 1 = 1). Auf der zweiten Ebene unter dem Stammknoten schätzen die LT- und GT-Werte, dass zwei Knoten geringer als der Schlüssel und ein Knoten größer als der Schlüssel für die Abfrage A > 50 vorhanden sind bzw. ist.
  • Auf der nächsten Ebene wird der neue aktuelle Knoten beim Traversieren des Baums 700, da der Schlüssel geringer als der Schlüssel des aktuellen Knotens ist, zum linken Blattknoten des alten aktuellen Knotens, wird der LT-Wert auf 4 aktualisiert (2·2 = 2) und wird der GT-Wert auf 3 aktualisiert (1·2 + 1 = 3). Auf der dritten Ebene unter dem Stammknoten schätzen die LT- und GT-Werte, dass vier Knoten geringer als der Schlüssel und drei Knoten größer als der Schlüssel für die Abfrage A > 50 vorhanden sind.
  • Auf der nächsten Ebene wird der neue aktuelle Knoten beim Traversieren des Baums 700, da der Schlüssel geringer als der Schlüssel des aktuellen Knotens ist, zum linken Blattknoten des alten aktuellen Knotens, wird der LT-Wert auf 8 aktualisiert (4·2 = 8) und wird der GT-Wert auf 7 aktualisiert (3·2 + 1 = 7). Auf der vierten Ebene unter dem Stammknoten schätzen die LT- und GT-Werte, dass acht Knoten geringer als der Schlüssel und sieben Knoten größer als der Schlüssel für die Abfrage A > 50 vorhanden sind.
  • Auf der nächsten Ebene wird der neue aktuelle Knoten beim Traversieren des Baums 700, da der Schlüssel größer als der Schlüssel des aktuellen Knotens ist, zum rechten Blattknoten des alten Stammknotens, wird der LT-Wert auf 17 aktualisiert (8·2 + 1 = 17) und wird der GT-Wert auf 14 aktualisiert (7·2 = 14). Auf der fünften Ebene unter dem Stammknoten schätzen die LT- und GT-Werte, dass 17 Knoten geringer als der Schlüssel und 14 Knoten größer als der Schlüssel für die Abfrage A > 50 vorhanden sind.
  • Auf der nächsten Ebene wird der neue aktuelle Knoten beim Traversieren des Baums 700, da der Schlüssel geringer als der Schlüssel des aktuellen Knotens ist, zum linken Blattknoten des alten aktuellen Knotens, wird der LT-Wert auf 34 aktualisiert (17·2 = 34) und wird der GT-Wert auf 29 aktualisiert (14·2 + 1 = 29). Auf der sechsten Ebene unter dem Stammknoten schätzen die LT- und GT-Werte, dass 34 Knoten geringer als der Schlüssel und 29 Knoten größer als der Schlüssel für die Abfrage A > 50 vorhanden sind.
  • Danach wird der Baum 700 für die obere Grenze 704, d. h. A < 200, traversiert. Auf der ersten Ebene abwärts vom Stammknoten wird der aktuelle Knoten beim Traversieren des Baums 700, da der Schlüssel größer als der Schlüssel des aktuellen Knotens ist, zum rechten Blattknoten des Stammknotens, wird der LT-Wert auf 1 (0·2 + 1 = 1) aktualisiert und wird der GT-Wert auf 0 (0·2 = 2) aktualisiert. Auf der ersten Ebene unter dem Stammknoten schätzen die LT- und GT-Werte, dass ein Knoten geringer als der Schlüssel und kein Knoten größer als der Schlüssel für die Abfrage A < 200 vorhanden ist.
  • Auf der nächsten Ebene wird der neue aktuelle Knoten beim Traversieren des Baums 700, da der Schlüssel geringer als der Schlüssel des aktuellen Knotens ist, zum linken Blattknoten des alten aktuellen Knotens, wird der LT-Wert auf 2 aktualisiert (1·2 = 2) und wird der GT-Wert auf 1 aktualisiert (0·2 + 1 = 1). Auf der zweiten Ebene unter dem Stammknoten schätzen die LT- und GT-Werte, dass zwei Knoten geringer als der Schlüssel und ein Knoten größer als der Schlüssel für die Abfrage A < 200 vorhanden sind bzw. ist.
  • Auf der nächsten Ebene wird der neue aktuelle Knoten beim Traversieren des Baums 700, da der Schlüssel größer als der Schlüssel des aktuellen Knotens ist, zum rechten Blattknoten des alten Stammknotens, wird der LT-Wert auf 5 aktualisiert (2·2 + 1 = 5) und wird der GT-Wert auf 2 aktualisiert (1·2 = 2). Auf der dritten Ebene unter dem Stammknoten schätzen die LT- und GT-Werte, dass fünf Knoten geringer als der Schlüssel und zwei Knoten größer als der Schlüssel für die Abfrage A < 200 vorhanden sind.
  • Auf der nächsten Ebene wird der neue aktuelle Knoten beim Traversieren des Baums 700, da der Schlüssel größer als der Schlüssel des aktuellen Knotens ist, zum rechten Blattknoten des alten Stammknotens, wird der LT-Wert auf 11 aktualisiert (5·2 + 1 = 11) und wird der GT-Wert auf 4 aktualisiert (2·2 = 4). Auf der vierten Ebene unter dem Stammknoten schätzen die LT- und GT-Werte, dass 11 Knoten geringer als der Schlüssel und 4 Knoten größer als der Schlüssel für die Abfrage A < 200 vorhanden sind.
  • Auf der nächsten Ebene wird der neue aktuelle Knoten beim Traversieren des Baums 700, da der Schlüssel geringer als der Schlüssel des aktuellen Knotens ist, zum linken Blattknoten des alten aktuellen Knotens, wird der LT-Wert auf 22 aktualisiert (11· 2 = 22) und wird der GT-Wert auf 9 aktualisiert (4·2 + 1 = 9). Auf der fünften Ebene unter dem Stammknoten schätzen die LT- und GT-Werte, dass 22 Knoten geringer als der Schlüssel und 9 Knoten größer als der Schlüssel für die Abfrage A < 200 vorhanden sind.
  • Auf der nächsten Ebene wird der neue aktuelle Knoten beim Traversieren des Baums 700, da der Schlüssel größer als der Schlüssel des aktuellen Knotens ist, zum rechten Blattknoten des alten Stammknotens, wird der LT-Wert auf 45 aktualisiert (22·2 + 1 = 45) und wird der GT-Wert auf 18 aktualisiert (9·2 = 18). Auf der sechsten Ebene unter dem Stammknoten schätzen die LT- und GT-Werte, dass 45 Knoten geringer als der Schlüssel und 18 Knoten größer als der Schlüssel für die Abfrage A < 200 vorhanden sind.
  • Nachdem der Baum 700 für beide Unterabfragen traversiert wurde, kann die Aufwandsschätzung, die beide Unterabfragen erfüllt, berechnet werden. Die Aufwandsschätzung kann auf zwei Methoden berechnet werden, wobei beide das gleiche Ergebnis erzielen.
  • Im ersten Ansatz kann die Aufwandsschätzung für A > 50 AND A < 200 unter Verwendung von LT-Werten durch Subtrahieren des LT-Werts für die untere Grenze vom LT-Wert für die obere Grenze berechnet werden. Bei diesem Beispiel ist der LT-Wert aus A > 200 (obere Grenze) 45 und der LT-Wert aus A < 50 (untere Grenze) 34. Somit ist die Aufwandsschätzung für A > 50 AND < 200 unter Verwendung des Geringer-als-Ansatzes 11 (45 – 34 = 11).
  • Im zweiten Ansatz kann die Aufwandsschätzung für A > 50 AND A < 200 unter Verwendung von GT-Werten durch Subtrahieren des GT-Werts für die obere Grenze vom GT-Wert für die untere Grenze berechnet werden. Bei diesem Beispiel ist der GT-Wert aus A < 50 (untere Grenze) 29 und der GT-Wert aus A < 200 (obere Grenze) 18. Somit ist die Aufwandsschätzung für A > 50 AND < 200 unter Verwendung des Größer-als-Ansatzes ebenfalls 11 (29 – 18 = 11).
  • 7 zeigt im schattierten Bereich, dass für die zusammengesetzte Abfrage ” A > 50 AND A < 200” 11 Einträge 720 vorhanden sein können, die die Abfrage erfüllen. Nach Traversierung des Baums kann jedoch auf laufender Schätzwert für sowohl die LT- als auch die GT-Wert für sowohl A > 50 als auch A < 200 in der Hauptspeicherdatenbank 108 gespeichert werden, so dass, wenn eine Abfrage unter Verwendung der Schlüssel 50 oder 200 aufgerufen wird, die Schätzwerte für diese Abfragen bereits berechnet sein werden, da der Baum bereits für die Schlüssel 50 und 200 traversiert wurde. Beim Traversieren des Baums wird die Iteratorposition für jeden Durchlauf ebenfalls gespeichert, so dass die Abfrageaufwandsschätzung auch das Abfrageergebnis ist. Der letzte Punkt an der Basis des Baums kann verzeichnet werden, so dass der Baum, wenn ein bestimmter Index zu einem späteren Zeitpunkt wiederverwendet wird, schnell von der Iteratorposition traversiert werden kann.
  • Die Aufwandsschätzung kann ebenso normalisiert werden. Somit kann die Aufwandsschätzung ausgehend von einer Baumgröße von 127 wie folgt normalisiert werden.
  • Die untere Grenze geringer als die Zählung (LB_lt) wird kumuliert (z. B. LB_lt = 0 + 1 + 2 + 4 + 8 + 17 + 34 = 66) und die untere Grenze größer als die Zählung (LB_gt) wird kumuliert, d. h. LB_gt = 0 + 0 + 1 + 3 + 7 + 14 + 29 = 54. Die untere Grenze geringer als die Zählung (LB_lt) und die untere Grenze größer als die Zählung (LB_gt) werden summiert, d. h. LB_lt + LB_gt = 66 + 54 = 120. Die untere Grenze geringer als die Zählung (LB_lt) wird durch Multiplizieren der unteren Grenze geringer als die Zählung (LB_lt) mit der Baumgröße geteilt durch die Summe der unteren Grenze geringer als die Zählung (LB_lt) und der unteren Grenze größer als die Zählung (LB_gt) normalisiert, i. e., N_LB_lt = LB_lt·(Baumgröße/Summe) = 66·(127/120) = 69,9. Die untere Grenze größer als die Zählung (LB_gt) wird durch Multiplizieren der unteren Grenze größer als die Zählung (LB_gt) mit der Baumgröße geteilt durch die Summe der unteren Grenze geringer als die Zählung (LB_lt) und der unteren Grenze größer als die Zählung (LB_gt) normalisiert, i. e., N_LB_gt = LB_gt·(Baumgröße/Summe) = 54·(127/120) = 57,2.
  • Die obere Grenze geringer als die Zählung (UB_lt) wird kumuliert (z. B. UB_lt = 0 + 1 + 2 + 5 + 11 + 22 + 45 = 86) und die obere Grenze größer als die Zählung (UB_gt) wird kumuliert, d. h. UB_gt = 0 + 0 + 1 + 2 + 4 + 9 + 18 = 34. Die obere Grenze geringer als die Zählung (UB_lt) und die obere Grenze größer als die Zählung (UB_gt) werden summiert, d. h. UB_lt + UB_gt = 86 + 34 = 120. Die obere Grenze geringer als die Zählung (UB_lt) wird durch Multiplizieren der oberen Grenze geringer als die Zählung (UB_lt) mit der Baumgröße geteilt durch die Summe der oberen Grenze geringer als die Zählung (UB_lt) und der oberen Grenze größer als die Zählung (UB_gt) normalisiert, i. e., N_UB_lt = UB_lt·(Baumgröße/Summe) = 86·(127/120) = 91. Die obere Grenze größer als die Zählung (UB_gt) wird durch Multiplizieren der oberen Grenze größer als die Zählung (UB_gt) mit der Baumgröße geteilt durch die Summe der oberen Grenze geringer als die Zählung (UB_lt) und der oberen Grenze größer als die Zählung (UB_gt) normalisiert, i. e., N_UB_gt = UB_gt·(Baumgröße/Summe) = 34·(127/120) = 36).
  • Die normalisierte Aufwandsschätzung kann durch Subtrahieren der normalisierten unteren Grenze geringer als die Zählung (N_LB_lt) von der normalisierten oberen Grenze geringer als die Zählung (N_UB_lt) berechnet werden, d. h. N_UB_lt – N_LB_lt = 91,0 – 69,9 = 21,2. Alternativ kann die normalisierte Aufwandsschätzung durch Subtrahieren der normalisierten oberen Grenze größer als die Zählung (N_UB_gt) von der normalisierten unteren Grenze größer als die Zählung (N_LB_gt) berechnet werden, d. h. N_LB_gt – N_UB_gt = 57,2 – 36,0 = 21,2.
  • Aufwandsnormalisierung
  • Im Einklang mit dem oben in Bezug auf den ausgeglichenen Baum von 6A beschriebenen Normalisierungsprozess kann die Aufwandsnormalisierung auch kompensieren, um einen halbausgeglichenen Baum (z. B. Rot-Schwarz-Baum) bereitzustellen. Jeder Baum kann mit einem gewissen Aufwand zum Erstellen des Baums und einer gewissen Ausgeglichenheitsgarantie verbunden sein. Die Ausgeglichenheitsgarantie wird verwendet, um den anfänglichen Abfrageergebnisschätzwert zu normalisieren. Die Normalisierung geht davon aus, dass das System, auch wenn der Baum nicht perfekt ausgeglichen ist, innerhalb von Grenzen weiß, inwieweit der Baum unausgeglichen sein kann.
  • 8 ist ein schematisches Schaubild, das einen unausgeglichenen Baum 800 zeigt. Der unausgeglichene Baum 800 ist ein Beispiel für die Probleme, die Aufwandsschätzwerte beeinflussen können, und dafür, wie eine Aufwandsnormalisierung angewandt werden kann, um dies zu kompensieren.
  • Die Aufwandsnormalisierung kann vorteilhaft verwendet werden, um das unausgeglichene Wesen des Baums zu kompensieren. Der lange Weg 802 durch den Baum wird abwärts der Mitte des Baums 800 befolgt. Wie durch die strichlierten Linien angezeigt, würden die Flächen 805 auf jeder Seite des Wegs 801 durch den Baum 800 als viel größer eingeschätzt, als sie in Wirklichkeit sind, geht man von einem ausgeglichenen dreieckigen Baum 803 aus. Wenn das Verhältnis der ”LT”-Seite des Dreieckes zur Seite des des Dreiecks in Betracht gezogen und mit der Gesamtgröße des Datensatzes multipliziert wird und wenn die Definitionsausgeglichenheit des Baumtyps (z. B. B-Baum, RB-Baum, B+-Baum) berücksichtigt wird, kann stattdessen jedoch ein genaueres Schätzwert erstellt werden, der in Bezug auf das bekannte Baumformat der Datenpunkte auf jeder Seite des Wegs 801 normalisiert ist.
  • 9 ist ein schematisches Schaubild, das einen weiteren unausgeglichenen Baum 900 zeigt, wobei ein kurzer Weg 901 befolgt wird. Der unausgeglichene Baum 900 und das Befolgen eines ”kurzen” Zweigs/Wegs 901 würde zu einer Unterschätzung der Anzahl von Einträgen führen, die die Abfrage erfüllen, d. h., die ausgeglichenen Dreiecke 905 auf jeder Seite des Wegs 901 beinhalten nicht den gesamten Baum 900. Wiederum kann das Verhältnis von jeder Seite der Tabelle ebenso verwendet werden, um einen normalisierten Wert der geschätzten Größe durch Multiplizieren des Verhältnisses der beiden Seiten zur Gesamtgröße des Datensatzes bereitzustellen.
  • Eine Normalisierung ist ein nützlicher Prozess im Rahmen des hier beschriebenen Ansatzes, sogar in Kontext eines perfekt ausgeglichenen Baums. Dies ist darauf zurückzuführen, dass sogar ein perfekt ausgeglichener Algorithmus nicht gewährleisten kann, dass alle Blätter auf der niedrigsten Ebene des Baums vorhanden sind. Beispielsweise wenn der Baum nur zwei Knoten hat, gibt es nur ein Blatt auf der zweiten Ebene. Da die Anzahl von Knoten im Baum exponentiell pro Ebene ist, wobei ein Versatz um eine Ebene zu großen Fehlern führen kann, ist eine Normalisierung sogar dann wichtig, wenn ein perfekt ausgeglichener Algorithmus verwendet wird.
  • Umgang mit doppelten Schlüsseln
  • Ein Problem in Zusammenhang mit dem Prozess und dem Pseudocode der 4 und 5 kann sein, dass die Aufwand()-Funktion davon ausgeht, dass jeder Schlüssel einzigartig ist. Indizes dürfen für gewöhnlich jedoch mehrere Einträge pro Schlüssel haben, und wenn jeder Schlüssel nicht einzigartig ist, kann das Traversieren des Baums zu Kollisionen führen. Wenn die Kollisionen in einer Liste unter einem einzelnen Knoten verzeichnet werden, kann der Baum ggf. nicht in der Lage sein, sich selbst wieder auszugleichen und die Aufwand()-Funktion kann ggf. keine begrenzten Schätzwerte produzieren. Um dieses Problem zu umgehen, ist es wünschenswert, dass jeder Schlüssel einzigartig ist, so dass sich der Baum selbst wieder ausgleichen kann.
  • Jeder Schlüssel kann durch Anhängen eines einzigartigen Werts an das Ende des Schlüssels einzigartig gemacht werden. Dies kann sowohl für einfache als auch zusammengesetzte Abfragen der Fall sein. Im Kontext einer zusammengesetzten Abfrage beispielsweise kann ein Schlüssel eine zusammengesetzte Abfrage der Felder A und B sein, wobei der Schlüssel durch Anhängen eines Felds U an das Ende des Schlüssels und Zuweisen eines einzigartigen Wertes zu U einzigartig gemacht werden kann. Da Vergleiche vom am weitesten links gelegenen Feld zum am weitesten rechts gelegenen Feld angestellt werden, ist es wichtig, das einzigartige Feld an das am weitesten rechts gelegene Feld anzuhängen, so dass die Kollisionen unter den gleichen Unterbaum fallen können. Da die äquivalenten Schlüsseln danach unter den gleichen Unterbaum fallen würden, können Suchschlüssel oberer und unterer Grenze erstellt und verwendet werden, um die Kosten des Unterbaums zu schätzen. Das Anhängen eines zufälligen Wertes U an das Ende des Schlüssels kann zu einem stärker abgeflachten Baum führen, wodurch ein ausgeglichenerer Baum erhalten wird.
  • Ein Beispiel: Es liegt ein zusammengesetzter Index von Feld A und B vor und es gibt eine Million Einträge mit dem gleichen zusammengesetzten Schlüssel (A = x, B = y). Intern würde der Prozessor 104 das Feld U an den zusammengesetzten Schlüssel (A = x, B = y, U = u) anhängen, so dass jeder Eintrag unter einem einzelnen Knoten verzeichnet wird, um den Baum wieder auszugleichen. Ein weiteres Beispiel: Es liegen Tausende von Einträge in einem Baum mit einem Wert von 5 vor, wodurch ein einzelner Knoten mit einem Teilbehälter voll mit Werten erhalten werden würde. Wenn jedoch ein zufälliger Wert an das Ende jedes Eintrags angehängt wird, sind nun alle Einträge einzigartig und ein ausgeglichener, abgeflachter Baum kann erstellt werden.
  • Idealerweise wäre das Feld U ein einzigartiger Wert für jeden Eintrag, ist jedoch nicht zwingend ein einzigartiger Eintrag, da eine Abfrageaufwandsschätzung ggf. nicht zu 100% genau sein muss. Darüber hinaus kann der den Baum ausgleichende Algorithmus keine perfekte Ausgeglichenheit garantieren, da ein gewisser Fehlergrad akzeptabel ist, und dem Feld U kann aus diesem Grund ein zufälliger Wert mit ausreichend Bits zugewiesen werden, um eine hohe Wahrscheinlichkeit der Einzigartigkeit zu schaffen.
  • Beim Umgang mit Abfragen für Bäume mit doppelten Einträgen und beim Anwenden der ”U”-Werte sollte der Suchschlüssel durch Anhängen entweder eines Maximalwertes von U + 1 oder eines Mindestwertes von U – 1 modifiziert werden. Wenn nach ”geringer als” oder ”größer gleich” gesucht wird, sollte der Mindestwert U – 1 an jeden Suchschlüssel angehängt werden. Wenn nach ”größer als” oder ”kleiner gleich” gesucht wird, sollte der Maximalwert U + 1 an den Suchschlüssel angehängt werden. Bei einer Ausführungsform ist der Suchschlüssel sodann {k, U + 1 oder U – 1}, je nach verwendeter Bereichsoperation, und sollte mit den Indexschlüsseln von links nach rechts verglichen werden, so dass k zuerst und danach U verglichen wird.
  • Um diesen Punkt zu veranschaulichen, wird von einem Baum ausgegangen, der all doppelten Schlüssel enthält, z. B. 100 Schlüssel von 5 und 100 Schlüssel von 6. Danach sind 100 Knoten mit Schlüsseln {5, U} und weitere 100 Knoten mit Schlüsseln {6, U} in dem Baum. Um ”f <= 5” zu finden, verwendet man den Schlüssel {5, max U + 1}, um den Baum die Mitte zwischen all den 5 Knoten und den 6 Knoten abwärts zu traversieren. Der Schlüssel wäre aufgrund von max U + 1 größer als all die 5 Knoten, aber geringer als all die 6 Knoten, da 5 geringer als 6 ist und der Vergleich von links nach rechts gemacht wird.
  • Ein Nachteil dieses Ansatzes ist die Menge des Speichers, die verwendet wird, um den einzigartigen Wert U an jeden zusammengesetzten Schlüssel anzuhängen. Eine Lösung dafür besteht darin, den einzigartigen Wert U nicht an jeden zusammengesetzten Schlüssel anzuhängen, bis eine Kollision erfolgt, wodurch die Speichernutzung verringert wird.
  • N-äre Bäume
  • Ein N-ärer Baum ist auch als K-ärer Baum oder M-ärer Baum bekannt und eine Baumstruktur mit einer bekannten Tiefe, wobei einige Knoten mit einem oder mehreren Werten gefüllt sind. Auch wenn sich diese Beschreibung auf einen Kontext bezieht, bei dem jeder Knoten einen gewissen Wert hat, können die Grundsätze dieser Offenbarung auch auf die Situation eines N-ären Baums angewandt werden, indem die einzelnen Werte innerhalb der N-ären Baumstruktur behandeln werden, als wären sie Knoten. Die Schätzwerte können danach im Wesentlichen mit der Anzahl von Werten innerhalb jedes Knoten multipliziert werden, und die anderen oben beschriebenen Grundsätze können bei den oben beschriebenen Abfragehandhabungs- und Schätzungsaufgaben angewandt werden. Dieser Ansatz ist in 10 gezeigt, die ein 3-2-N-ärer Baum 1000 mit der begleitenden Mathematik ist, die aus der obigen Veranschaulichung in Bezug auf den Ansatz der 6A6B adaptiert wurde.
  • 11 stellt einen generalisierten Pseudocodeansatz 1100 bereit, der für eine Anwendung auf N-äre Bäume adaptiert wurde.
  • Auch wenn sich die vorstehenden Beschreibungen auf den Kontext des Optimierens von Abfragen und Aufwandsschätzungen für ausgeglichene und halbausgeglichene Bäume beziehen, könnten die Grundsätze in Indizes von ”unausgeglichenen” Bäumen verwendet werden, wobei der Index auf der Grundlage der bereits vorhandenen Kenntnis der eingehenden Datenbankeintragsordnung/-verteilung eine relativ bekannte Ausgeglichenheit haben würde. Einige der obigen Techniken könnten dennoch bei solchen Bäumen verwendet werden, auch wenn sie nicht notwendigerweise ausgeglichen/wieder ausgeglichen werden, und die Normalisierung würde auf der erweiterten Verteilung von eingehenden Daten basieren.
  • Die vorstehenden ausführlichen Beschreibungen von Ausführungsformen sind lediglich beispielhaft und nicht einschränkend. Somit sollten die Breite und der Umfang einer bevorzugten Ausführungsform durch keine der oben beschriebenen beispielhaften Ausführungsformen eingeschränkt sein, sondern sollten nur gemäß den Ansprüchen und deren Äquivalenten definiert sein.
  • Wie hier Bezug genommen, kann z. B. eine Maschine oder ein Modul eine virtuelle Maschine, ein Computerknoten, eine Instanz, ein Host oder eine Maschine in einer vernetzten Rechenumgebung sein. Wie ebenfalls hier Bezug genommen, ist eine vernetzte Rechenumgebung eine Sammlung von Maschinen, die durch Kommunikationskanäle verbunden sind, die eine Kommunikation zwischen Maschinen erleichtern und Maschinen die gemeinsame Nutzung von Ressourcen ermöglichen. Ein Netzwerk kann sich auch auf ein Kommunikationsmedium zwischen Prozessen auf der gleichen Maschine beziehen. Wie ebenfalls hier Bezug genommen, ist ein Server eine Maschine, die bereitgestellt ist, um ein Programm auszuführen, das als Socket-Überwachung agiert, und kann Software-Instanzen beinhalten. Eine solche Maschine oder ein solches Modul kann eine beliebige Form von Verarbeitungskomponente darstellen und/oder beinhalten, z. B. Universalcomputer, dedizierte Mikroprozessoren oder andere Verarbeitungseinheiten, die in der Lage sind, elektronische Informationen zu verarbeiten. Beispiele für einen Prozessor umfassen Digitalsignalprozessoren (DSPs), anwendungsspezifische integrierte Schaltungen (ASICs), feldprogrammierbare Gate-Arrays (FPGAs) und beliebige andere geeignete spezifische oder Universalprozessoren.
  • Ein Speicher kann beliebige geeignete Informationen speichern. Ein Speicher kann eine beliebige Sammlung und Anordnung von flüchtigen und/oder nichtflüchtigen Komponenten umfassen, die sich für das Speichern von Daten eignet. Beispielsweise kann ein Speicher Direktzugriffsspeicher-(RAM)-Einheiten Nur-Lese-Speicher-(ROM)-Einheiten, magnetische Speichereinheiten, optische Speichereinheiten und/oder beliebige andere geeignete Datenspeichereinheiten umfassen. Bei bestimmten Ausführungsformen kann der Speicher teilweise in computerlesbaren Speichermedien vorhanden sein, auf denen Computeranweisungen und/oder Logik kodiert sind. Der Speicher kann eine beliebige Anzahl von Speicherkomponenten innerhalb eines Prozessor, in Bezug auf diesen lokal oder für diesen zugreifbar darstellen.
  • Ressourcen können beliebige Typen von Ressourcen für laufende Instanzen umfassen, z. B. Hardware (wie Server, Clients, Mainframe-Computer, Netzwerke, Netzwerkspeicher, Datenquellen, Speicher, Zentralverarbeitungseinheitszeit, wissenschaftliche Instrumente und andere Recheneinheiten) sowie Software, Software-Lizenzen, verfügbare Netzwerkdienste und andere Nicht-Hardware-Ressourcen oder eine Kombination davon.
  • Eine vernetzte Rechenumgebung kann Computing-Grid-Systeme, verteilte Rechenumgebungen, Cloud-Computing-Umgebung usw. umfassen, ohne jedoch darauf beschränkt zu sein. Solche vernetzten Rechenumgebungen umfassen Hardware- und Software-Infrastrukturen, die so konfiguriert sind, dass sie eine virtuelle Organisation bilden, die aus mehreren Ressourcen bestehen, die an geographisch zerstreuten Orten vorhanden sein können.
  • Diverse hier verwendete Begriffe haben innerhalb des vorliegenden technischen Gebiets spezielle Bedeutungen. Ob ein bestimmter Ausdruck als ein solcher ”Fachausdruck” interpretiert werden sollte, hängt vom Kontext ab, in dem der Begriff verwendet wird. ”Verbunden mit”, ”in Kommunikation mit” oder andere ähnliche Ausdrücke sollten im Allgemeinen als Situationen mit einschließend interpretiert werden, in denen sowohl Kommunikationen als auch Verbindungen direkt zwischen referenzierten Elementen oder durch eine oder mehrere dazwischen liegende Einheiten vorliegen, z. B. über das Internet oder ein anderes Kommunikationsnetzwerk. ”Netzwerk”, ”System”, ”Umgebung” und andere ähnliche Ausdrücke beziehen sich im Allgemeinen auf vernetzte Rechensysteme, die einen oder mehrere Aspekte der vorliegenden Offenbarung verkörpern. Diese und andere Ausdrücke sind im jeweiligen Kontext, in dem sie im Rahmen der vorliegenden Offenbarung verwendet werden, und so zu interpretieren, wie ein durchschnittlicher Fachmann auf dem Gebiet diese Ausdrücke im offenbarten Kontext verstehen würde. Die obigen Definitionen schließen andere Bedeutungen nicht aus, die den Ausdrücken auf der Grundlage des offenbarten Kontextes verliehen werden könnten.
  • Begriffe, die einen Vergleich, eine Messung und einen Zeitablauft beschreiben, z. B. ”zum Zeitpunkt”, ”äquivalent”, ”während”, ”vollständig” und dergleichen sollten als ”im Wesentlichen zum Zeitpunkt”, ”im Wesentlichen äquivalent”, ”im Wesentlichen während”, ”im Wesentlichen vollständig” usw. ausgelegt werden, wobei ”im Wesentlichen” bedeutet, dass solche Vergleiche, Messungen und Zeitabläufe durchführbar sind, um das angegebene gewünschte Ergebnis implizit oder ausdrücklich zu erhalten.
  • Darüber hinaus sind die Abschnittsüberschriften hier im Einklang mit den Empfehlungen unter 37 CFR 1.77 oder anderweitig angeführt, um organisatorische Anhaltspunkte bereitzustellen. Die Überschriften schränken die eine oder mehreren Erfindungen, wie in den Ansprüchen beschrieben, die aus dieser Offenbarung hervorgehen können, nicht ein, noch charakterisieren sie diese. Insbesondere und beispielhaft sollten solche Ansprüche, auch wenn sich die Überschriften auf ein ”Technisches Gebiet” beziehen, durch die in diesem Zusammenhang zur Beschreibung des sogenannten technisches Gebiets verwendete Sprache eingeschränkt sein. Darüber hinaus ist eine Beschreibung einer Technologie im ”Hintergrund” nicht als ein Eingeständnis auszulegen, dass Technologie für beliebige der einen oder mehreren Erfindungen in dieser Offenbarung Stand der Technik ist. Die ”Kurzfassung” ist darüber hinaus auch nicht als Charakterisierung der einen oder mehreren Erfindung anzusehen, die in den sich ergebenden Ansprüchen ausgeführt ist. Außerdem sollte keine Bezugnahme in dieser Offenbarung auf ”Erfindung” im Singular verwendet werden, um zu argumentieren, dass in dieser Offenbarung nur ein einzelner Neuheitspunkt erfüllt ist. Mehrere Erfindungen können gemäß den Einschränkungen der mehreren Ansprüche ausgeführt sein, die sich aus dieser Offenbarung ergeben, und solche Ansprüche definieren die eine oder mehreren Erfindungen und deren Äquivalente, die davon geschützt werden, dementsprechend. Jedenfalls ist der Umfang solcher Ansprüche angesichts dieser Offenbarung als eigenständig anzusehen, sollte jedoch durch die hier angeführten Überschriften nicht eingeschränkt sein.

Claims (20)

  1. System zum Optimieren von Datenbankabfragen und Schätzen von Abfrageaufwänden, wobei das System umfasst: ein computerlesbares Medium, das eine baumindexierte Datenstruktur aufweist und so betreibbar ist, dass es eine computerlesbare Abfrageoptimierungseinheit speichert; und einen Prozessor, der so betreibbar ist, dass er die Abfrageoptimierungseinheit zum Berechnen eines Aufwandsschätzwertverhältnisses von Knoten in der baumindexierten Datenstruktur ausführt, wobei das Aufwandschätzwertverhältnis eine erste Anzahl von Knoten mit Werten, die geringer als ein Schlüsselwert ist, versus eine zweite Anzahl von Knoten mit Werten umfasst, die größer als der Schlüsselwert sind, und der darüber hinaus so betreibbar ist, dass er eine Aufwandsschätzung durch Normalisieren des Aufwandschätzwertverhältnisses in Berg auf eine Gesamtgröße der baumindexierten Datenstruktur berechnet, wobei die baumindexierte Datenstruktur eine hierarchische Struktur mit einem Stammknoten und einer Mehrzahl von untergeordneten Knoten umfasst, und darüber hinaus wobei der Baumindex mit dem Schlüsselwert traversiert wird.
  2. System nach Anspruch 1, wobei die Knoten gespeicherte Werte umfassen, die mit dem Schlüsselwert verglichen werden, wenn der Baumindex traversiert wird.
  3. System nach Anspruch 2, wobei der Prozessor den Baumindex durch Vergleichen des Schlüsselwerts mit den gespeicherten Werten traversiert, wobei er beim Stammknoten beginnt und die hierarchische Struktur so lange traversiert, bis ein gespeicherter Wert einer verglichenen Knotens mit dem Schlüsselwert übereinstimmt.
  4. System nach Anspruch 3, wobei der Prozessor zu einem linken Knoten auf einer niedrigeren Ebene in der hierarchischen Struktur traversiert, wenn der gespeicherte Wert eines verglichenen Knotens geringer als der Schlüsselwert ist, und zu einem rechten Knoten auf einer niedrigeren Ebene traversiert, wenn der gespeicherte Wert des verglichenen Knotens größer als der Schlüssel wert ist.
  5. System nach Anspruch 4, wobei der Prozessor darüber hinaus betreibbar ist, um eine erste laufende Summe von Knoten mit Werten, die geringer als der Schlüsselwert sind, und eine zweite laufende Summe von Knoten mit Werten zu berechnen, die größer als der Schlüsselwert sind, und eine Anzahl von Übereinstimmungen, die in einem linken Unterbaum und einem rechten Unterbaum für eine bestimmte Abfrage vorhanden sind, auf der Grundlage der ersten und zweiten laufenden Summen schätzt.
  6. System nach Anspruch 5, wobei das Aufwandsschätzwertverhältnis auf den ersten und zweiten laufenden Summen basiert.
  7. System nach Anspruch 6, wobei der Prozessor die Aufwandsschätzung unter Verwendung der nachstehenden Formeln berechnet: Schätzwert der Anzahl von Knoten mit Werten geringer als der Schlüssel =
    Figure DE112012004916T5_0002
    Schätzwert der Anzahl von Knoten mit Werten größer als der Schlüssel =
    Figure DE112012004916T5_0003
  8. System nach Anspruch 1, wobei die Werte jedes Knotens einzigartig sind.
  9. System nach Anspruch 8, wobei der Prozessor darüber hinaus so betreibbar ist, dass er einen einzigartigen Wert an ein Ende eines Werts in einem Knoten anhängt, um zu ermöglichen, dass die Werte jedes Knoten einzigartig werden.
  10. System nach Anspruch 9, wobei das Anhängen der einzigartigen Werte zu einem im Wesentlichen abgeflachten Baum führt.
  11. System nach Anspruch 1, wobei der Baumindex ein ausgeglichener Baumindex ist.
  12. System nach Anspruch 1, wobei im Baumindex ein halbausgeglichener Baumindex ist.
  13. System nach Anspruch 1, wobei die baumindexierte, Datenstruktur eine speicherinterne Datenbankstruktur ist.
  14. Verfahren zum Optimieren von Datenbankabfragen und Schätzen von Abfrageaufwänden, wobei das System umfasst: Ausführen einer computerausführbaren Abfrageoptimierungseinheit unter Verwendung eines Computerprozessors, die in einem computerlesbaren Medium gespeichert ist, wobei die Abfrageoptimierungseinheit betreibbar ist zum: Berechnen eines Aufwandsschätzwertverhältnisses von Knoten in einer baumindexierten Datenstruktur, wobei das Aufwandschätzwertverhältnis eine erste Anzahl von Knoten mit Werten, die geringer als ein Schlüsselwert ist, versus eine zweite Anzahl von Knoten mit Werten umfasst, die größer als der Schlüsselwert sind, und Berechnen einer Aufwandsschätzung durch Normalisieren des Aufwandschätzwertverhältnisses in Bezug auf eine Gesamtgröße der baumindexierten Datenstruktur, wobei die baumindexierte Datenstruktur eine hierarchische Struktur mit einem Stammknoten und einer Mehrzahl von untergeordneten Knoten umfasst, und darüber hinaus wobei der Baumindex mit dem Schlüsselwert traversiert wird.
  15. Verfahren nach Anspruch 14, wobei die Knoten gespeicherte Werte umfassen, und das Verfahren darüber hinaus das Traversieren des Baumindex durch Vergleichen der gespeicherten Werte mit dem Schlüsselwert umfasst.
  16. System nach Anspruch 15, das darüber hinaus umfasst: Traversieren des Baumindex durch Vergleichen des Schlüsselwerts mit den gespeicherten Werten unter Verwendung des Prozessors, wobei beim Stammknoten begonnen wird und die hierarchische Struktur so lange traversiert wird, bis ein gespeicherter Wert einer verglichenen Knotens mit dem Schlüsselwert übereinstimmt.
  17. System nach Anspruch 16, das darüber hinaus umfasst: Traversieren zu einem linken Knoten auf einer niedrigeren Ebene in der hierarchischen Struktur, wenn der gespeicherte Wert eines verglichenen Knotens geringer als der Schlüsselwert ist; und Traversieren zu einem rechten Knoten auf der Ebene, wenn der gespeicherte Wert des verglichenen Knotens größer als der Schlüsselwert ist
  18. System nach Anspruch 17, das darüber hinaus umfasst: Berechnen einer ersten laufenden Summe von Knoten mit Werten, die geringer als der Schlüsselwert sind, und einer zweiten laufenden Summe von Knoten mit Werten, die größer als der Schlüsselwert sind, und Schätzen einer Anzahl von Übereinstimmungen, die in einem linken Unterbaum und einem rechten Unterbaum für eine bestimmte Abfrage vorhanden sind, auf der Grundlage der ersten und zweiten laufenden Summen.
  19. System nach Anspruch 18, wobei das Aufwandsschätzwertverhältnis auf den ersten und zweiten laufenden Summen basiert.
  20. System nach Anspruch 19, wobei das Berechnen des Aufwandsschätzwerts die folgenden Formeln verwendet: Schätzwert der Anzahl von Knoten mit Werten geringer als der Schlüssel =
    Figure DE112012004916T5_0004
    Schätzwert der Anzahl von Knoten mit Werten größer als der Schlüssel =
    Figure DE112012004916T5_0005
DE112012004916.0T 2011-11-25 2012-11-26 Verbesserte Datenbankabfrage und Aufwandsschätzung Pending DE112012004916T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201161563728P 2011-11-25 2011-11-25
US61/563,728 2011-11-25
PCT/US2012/066551 WO2013078478A1 (en) 2011-11-25 2012-11-26 Improved database query optimization and cost estimation

Publications (1)

Publication Number Publication Date
DE112012004916T5 true DE112012004916T5 (de) 2014-09-11

Family

ID=48467770

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112012004916.0T Pending DE112012004916T5 (de) 2011-11-25 2012-11-26 Verbesserte Datenbankabfrage und Aufwandsschätzung

Country Status (4)

Country Link
US (1) US8880511B2 (de)
DE (1) DE112012004916T5 (de)
IN (1) IN2014CN04410A (de)
WO (1) WO2013078478A1 (de)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150134676A1 (en) * 2013-11-11 2015-05-14 International Business Machines Corporation Amorphous data query formulation
WO2015073003A1 (en) * 2013-11-14 2015-05-21 Hewlett-Packard Development Company, L.P. Estimating data
US20150186550A1 (en) * 2013-12-26 2015-07-02 Nandan MARATHE Append-Only B-Tree Cursor
US9996569B2 (en) 2015-03-18 2018-06-12 International Business Machines Corporation Index traversals utilizing alternate in-memory search structure and system memory costing
US9946752B2 (en) * 2015-04-27 2018-04-17 Microsoft Technology Licensing, Llc Low-latency query processor
US20170192688A1 (en) * 2015-12-30 2017-07-06 International Business Machines Corporation Lazy deletion of vaults in packed slice storage (pss) and zone slice storage (zss)
US9934051B1 (en) * 2017-04-17 2018-04-03 Futurewei Technologies, Inc. Adaptive code generation with a cost model for JIT compiled execution in a database system
CN113157706A (zh) * 2019-03-15 2021-07-23 北京忆芯科技有限公司 具有节点索引的b+树操作装置及其方法
US10983991B1 (en) * 2020-09-29 2021-04-20 Atlassian Pty Ltd. Project management system data storage

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4575798A (en) * 1983-06-03 1986-03-11 International Business Machines Corporation External sorting using key value distribution and range formation
US6510422B1 (en) * 2000-09-27 2003-01-21 Microsoft Corporation Cost based materialized view selection for query optimization
US7617179B2 (en) * 2002-06-29 2009-11-10 Ianywhere Solutions, Inc. System and methodology for cost-based subquery optimization using a left-deep tree join enumeration algorithm
US7213012B2 (en) * 2003-05-09 2007-05-01 Oracle International Corporation Optimizer dynamic sampling
US7392242B1 (en) * 2004-02-27 2008-06-24 Hyperion Solutions Corporation Query costing in a multidimensional database
US7636735B2 (en) * 2005-08-19 2009-12-22 International Business Machines Corporation Method for estimating the cost of query processing
US7415455B2 (en) * 2005-08-24 2008-08-19 International Business Machines Corporation Self-healing RDBMS optimizer
KR101133516B1 (ko) 2009-04-16 2012-04-04 연세대학교 산학협력단 데이터 스트림에서의 다중 조인 질의 최적화 방법
US8285711B2 (en) * 2009-11-24 2012-10-09 International Business Machines Corporation Optimizing queries to hierarchically structured data

Also Published As

Publication number Publication date
WO2013078478A1 (en) 2013-05-30
US20130138679A1 (en) 2013-05-30
IN2014CN04410A (de) 2015-09-04
US8880511B2 (en) 2014-11-04

Similar Documents

Publication Publication Date Title
DE112012004916T5 (de) Verbesserte Datenbankabfrage und Aufwandsschätzung
DE112012005533B4 (de) Unterstützende Abfrage und ein Abfragen
DE112015000218B4 (de) Verfahren, System und Computerprogramm zum Abtasten einer Mehrzahl von Speicherbereichen in einem Arbeitsspeicher nach einer spezifizierten Anzahl von Ergebnissen
DE4323947C2 (de) Verfahren zum Steuern von Datenbankabfragen in einem heterogenen, verteilten Datenbanksystem
DE60130475T2 (de) Durchführung von kalkulationen eines tabellenkalkulationstyps in einem datenbanksystem
DE112013003205T5 (de) Verfahren und Vorrichtung zum Verarbeiten von Datenbankdaten in einem verteilten Datenbanksystem
DE112019003833T5 (de) Schwachstellenanalyse von open-source-software
DE112020003820T5 (de) Erkennung von Anomalien und Abweichungen unter Verwendung eines domänenindizierten Einschränkungs-Repository
DE202017007212U1 (de) System zur inkrementellen Clusterwartung einer Tabelle
DE112020000749T5 (de) Indexerstellung für sich entwickelnde umfangreiche Datensätze in Hybriden Transaktions- und Analysenverarbeitungssystemen mit mehreren Mastern
DE69935657T2 (de) Verfahren und gerät zum optimieren der querygenerierung durch selektives verwenden von zusätzen oder schlüsselwerten
DE102016105526A1 (de) Schnelles mehrschichtiges Indexieren mit Unterstützung für dynamische Aktualisierung
DE112015000347T5 (de) Verarbeiten von Datensätzen in einer Ablage für große Datenmengen
DE202015009874U1 (de) Implementierung semistrukturierter Daten als ein Datenbankelement erster Klasse
DE102013216273A1 (de) Umwandlung von Datenbanktabellenformaten auf der Grundlage von Benutzerdatenzugriffsmustern in einer vernetzten Datenverarbeitungsumgebung
EP3520014B1 (de) Verfahren und system zum anonymisieren von datenbeständen
DE102012216029A1 (de) Ein skalierbares anpassungsfähiges map-reduce-rahmenwerk mit verteilten daten
DE112011104005T5 (de) Verfahren und Datenverarbeitungssystem zum Kodieren von in einer spaltenorientierten Weise gespeicherten Daten, Datenverarbeitungsprogramm und Computerprogrammprodukt
DE112018005076T5 (de) Erstellen einer rangfolge von dokumenten auf grundlage ihres semantischen reichtums
DE112014001997T5 (de) Kennzeichnen von Client-Zuständen
DE112021005422T5 (de) Auf lernen beruhende arbeitslast-ressourcenoptimierung für datenbank-managementsysteme
DE102018000039A1 (de) Bündeln von Onlinecontentfragmenten zur Präsentation auf Grundlage von contentspezifischen Metriken und Intercontentrandbedingungen
DE202017105891U1 (de) Knoten in einem gerichteten azyklischen Graphen
DE102012216321A1 (de) Verfahren und System zur Nachkonstruktion von Protokollen
DE102021109138A1 (de) Ausführung von abfrageplänen

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R079 Amendment of ipc main class

Free format text: PREVIOUS MAIN CLASS: G06F0017300000

Ipc: G06F0016000000

R082 Change of representative

Representative=s name: MUELLER-BORE & PARTNER PATENTANWAELTE PARTG MB, DE

Representative=s name: WITHERS & ROGERS LLP, DE

R079 Amendment of ipc main class

Free format text: PREVIOUS MAIN CLASS: G06F0016000000

Ipc: G06F0016245300

R081 Change of applicant/patentee

Owner name: CLOUD SOFTWARE GROUP, INC., PALO ALTO, US

Free format text: FORMER OWNER: TIBCO SOFTWARE INC., PALO ALTO, CALIF., US

R082 Change of representative

Representative=s name: MUELLER-BORE & PARTNER PATENTANWAELTE PARTG MB, DE