Hallo nochmal,
auf die Effizienz bei Abfragen, dass 15 nach 14 kommt wollte ich gar
hinaus, sondern auf der anderen Seite, wenn es darum geht, Daten zu
schreiben. Also nix mit "öfter gemeinsam abgerufen werden".
bin ich gar nicht dafür verantworlich, wo die birnen und die äpfel nun sind.
d'accord, hab ich auch nie behauptet. Das DBMS trägt die Verantwortung
dafür, einen beliebigen Datensatz X anhand deiner Kriterien zu finden
und dies zudem noch in einer entsprechend kurzen Zeit. Dazu kann es
die ganze Tabelle von vorn (einen Anfang muss die Tabelle ja haben)
bis hinten (ein Ende auch) one by one durchsuchen, bis es einen oder
entsprechend viele gefunden hat, die deinem Kriterium entsprechen.
Und damit dies schneller vonstatten geht, benutzt man Indizes, denn
diese, da wirst du mir sicher nicht widersprechen wollen, sind sortiert.
Was ist denn genau der Primary Key einer Tabelle? Basiert er nicht auf
einem Index? Und welche Daten beinhaltet er? Und warum?
... damit das DBMS weiss, an welcher Stelle es mehr oder weniger Sinn
macht im Datenbrei von Bytes zu lesen.
Was passiert, wenn es keinen einzigen Index oder Primary Key auf einer
Tabelle gibt? Ein Full Table Scan, das hatten wir ja grad schon
Keine Ahnung, wie MySQL seine Datensätze physikalisch ausfindig macht,
jedoch wird es wohl nicht viel anders funktionieren.
Bei Oracle ist lt. deiner Aussage die RowId für die physikalische
Speicherung verantwortlich, wie funktioniert diese RowId?
Zufallswerte?
Stell dir einfach vor eine Tabelle mit einem alphanumerischen PK: A-Z0-9
Key | Payload
-----------------------------------------------
Alf | Hello World !
Frei | Hello Ilja !
Kohl | Hello wahsaga !
Zauber | Hello SelfHtml !
im Datenbrei sieht das dann so aus (Beispiel)
Alf|Hello World !||Frei|Hello Ilja !||Kohl|Hello wahsaga !||Zauber|Hello SelfHtml !EOF
Jetzt kommt ein weiterer Datensatz hinzu,
Key | Payload
-----------------------------------------------
Muster | Hello Cheatah !
Wo wird dieser im Datenbrei dann hingeschrieben?
[ ] Ans Ende (wäre vernünftig und nicht unlogisch)
[ ] Zwischen "Kohl" und "Zauber" (wäre das unlogisch?)
Wo wird der Schlüssel-Wert des PK hingeschrieben?
[ ] Ans Ende (warum?)
[ ] Zwischen "Kohl" und "Zauber" (warum?)
Was passiert im jeweils 2. Fall? Alles nach "Muster" kommt muss um
die Datenmenge des neuen Eintrages (Tabelle oder Index Node)
verschoben werden. In sofern wäre es günstig, wenn das nur beim Index
bzw. dem PK notwendig wäre, weil weniger Daten, oder?
Am Beispiel MS SQL kann ich dem Primary Key sagen, dass er für die
Ordnung der Daten in den Blöcken und Seiten verantwortlich ist.
Ein numerischer PK mit aufsteigender Sortierordnung würde also
Datensätze, die einen niedrigen Schlüsselwert haben, am Anfang
speichern... usw. Lass ich den PK weg habe ich, wie du das so schön
behauptest, eine wirklich unsortierte Menge. Ansonsten eine sortierte.
Ein streng fortlaufender Schlüsselwert ist sofern generell besser,
da er mindestens an einer Stelle das wiederholte unnötige Verschieben
von Daten unterdrücken kann, da neue Daten generell nur am Ende
angefügt werden. Weniger Fragmentierung, weniger Leseaufwand usw.
Alles was ich mitteilen wollte.
Aber kläre doch mal bitte über Oracles RowID auf, oder wie es sich
bei MySQL verhält, das wäre sicher informativ für das Publikum.
Ich hoffe, das ist jetzt angekommen.
Cheers,
Frank