2010-05-21 11 views
15

Ich war schon immer daran interessiert, wie Sie SQL in der Datenbank werfen können, und es liefert Ihre Ergebnisse fast augenblicklich in einer geordneten Weise zurück, ohne darüber als etwas anderes als eine Blackbox zu denken.Wie funktionieren relationale Datenbanken unter der Haube?

Was ist wirklich los?

Ich bin mir ziemlich sicher, dass es etwas damit zu tun hat, wie Werte regelmäßig im Speicher angeordnet sind, ähnlich einem Array; aber abgesehen davon weiß ich nicht viel anderes.

Wie wird SQL in einer Weise geparst, um all dies zu erleichtern?

+0

Siehe auch: http://stackoverflow.com/questions/751236/relational-databases-there-has-to-be-more-right –

Antwort

12

Die Engine erstellt einen so genannten Abfrageplan.

Es ist eine Reihe von Algorithmen verwendet, um die Sätze, die Sie mit einer SQL Abfrage logisch beschrieben zurückgeben.

Fast jede Engine lässt Sie sehen, welcher Abfrageplan für eine bestimmte Abfrage erstellt wird.

  • In MySQL und PostgreSQL, voranstellen Sie Ihre Abfrage mit dem Wort EXPLAIN

  • In SQL Server führen Sie SET SHOWPLAN_TEXT ON vor dem Ausführen der Abfrage oder drücken Sie einfach Ctrl-L im Management Studio

  • In Oracle , Sie die Abfrage mit EXPLAIN PLAN FOR voranstellen und dann SELECT * FROM (dbms_xplan.display)

  • ausgeben

können Sie diesen Artikel in meinem Blog interessant finden:

, die die gleiche Frage befasst.

+2

Favorite your blog, und druckte einfach Ihren Artikel aus, um im Zug zurück zu lesen Zuhause; Vielen Dank! – Pierreten

2

Sie diese Bücher lesen können:

[1] H. Garcia-Molina, Datenbank Systemimplementierung, Prentice Hall, 2000

[2] R. Elmasri, SB Navathe, Grundlagen der Datenbanksysteme, Die Benjamin/Cummings Publ. Comp, Inc 1994

5

In einem grundlegenden Sinn, für viele RDBMS.

a) Die Syntaxanalyse Stufe nimmt die Eingabe von dem Server-Setup (Steckdosen, was auch immer) und macht diese SQL in eine gültige AST oder ein anderes Zwischenform.
b) Es leitet diese Informationen dann an eine Speicher-Engine weiter, die diese Abfragebeschreibung in eine Menge von Nachschlagen auf Indizes, Tabellen, Partitionen, replizierte Daten und andere Elemente umwandelt, die die Semantik zum Speichern des Schemas bilden. C) Die Engine gibt dann eine Reihe von Daten zurück, die dem Client in welcher Form auch immer zur Verfügung gestellt werden (XML, CSV, Client-spezifisch).

Aber es gibt keine eine wahre Antwort. Sie werden Ähnlichkeiten in Indexierungsalgorithmen, Verteilungsalgorithmen, Caching, Sperren und anderen Dingen finden ...Die wichtigsten Gemeinsamkeiten sind jedoch die Sprachschnittstelle der SQL-Sprache selbst. Darüber hinaus können sie beliebig implementiert werden ... sofern ihre Ergebnisse die erwartete Semantik der Eingabeabfrage erfüllen.

Wirklich RDBMs enthalten alle Arten von Strukturen aus der Informatik ... und jede hat hochentwickelte und spezialisierte Methoden, um die implizite Semantik von SQL in konkreten Speicher umzuwandeln.

Denken Sie daran, wie unterschiedlich MySQL und Oracle sind ... oder PostgreSQL und Microsoft SQL. Sie alle Versuch, um eine Art von gemeinsamen SQL-ähnliche Spezifikation zu erfüllen ... aber wie diese Spezifikation erfüllt wird, ist vielfältig.

Engines enthalten alle Arten von Exotica, spezielle Indizes, um Daten physischer Standort, Caching-Systeme und vieles mehr zu finden.

Es gibt Tonnen Open-Source- Datenbanken wie MySQL, PostgreSQL und Suchsysteme wie Sphinx Sie einen Blick auf ihre Umsetzung haben. Open Source ist zum Lernen so viel wie alles! Versuchen Sie, einen "Mentor" zu finden, der Sie durch die Quelle führt.

3

Ich bin mir ziemlich sicher, dass es etwas damit zu tun hat, wie Werte regelmäßig im Speicher angeordnet sind, ähnlich einem Array; aber abgesehen davon weiß ich nicht viel anderes.

Sie können auch Artikel auf B+ Trees nachschlagen. Das ist die Datenstruktur, die relationale Hauptdatenbanken verwenden.

Verwandte Themen