2009-08-11 3 views
1

Ich habe eine Anwendung, die Daten in eine MySQL-Tabelle sammelt. Die Tabelle hat keine eindeutige ID-Spalte, daher kann ich keine bestimmte Zeile nach ID referenzieren.Ist die Reihenfolge der Zeilen in einer MYSQL-Tabelle festgelegt, sodass Abfragen sie immer in dieser Reihenfolge zurückgeben?

Ich möchte eine Dump-Anwendung schreiben, die jeden Tag die neuen Zeilen ablegt, die der Tabelle hinzugefügt werden, um sie woanders hochzuladen. Ich könnte es tun, indem ich ein eindeutiges ID-Feld anfüge und die letzte ID abspeicherte, aber ich möchte keine ID-Spalte nur dafür in die Tabelle einfügen.

Also dachte ich, ich die Anzahl der Zeilen in der Tabelle bei jedem Speicherauszug speichern und verwenden Sie diese Zahl als Offset beim nächsten Ablegen der Tabelle (wählen Sie * aus Tabellenlimit verarlargenumber Offset x). Natürlich funktioniert es nur, wenn es eine Garantie gibt, dass neue Zeilen immer am Ende der Tabelle eingefügt werden, so dass alle neuen Zeilen nach dem Offset sind.

Ich gehe davon aus, dass ich mich darauf verlassen kann. Habe ich recht?

+0

Danke für die Antworten. Ich dachte, dass die Datenbank nur Indizes verwendet, um den Zugriff zu optimieren, und das physische Material nicht berührt. Ich habe mich geirrt. –

Antwort

4

Nein, das ist nicht der Fall. Die Datenbank verschiebt Dinge, um sie zu optimieren und Abfragen schneller zu machen. Sie müssten Ihrer Abfrage eine order by-Klausel hinzufügen, um eine beliebige Reihenfolge zu gewährleisten. Sie sollten auf jeden Fall eine eindeutige ID zu Ihrer Tabelle hinzufügen.

+0

Ich wünschte, meine Datenbank-Engine würde "Dinge bewegen, um zu optimieren und Abfragen schneller zu machen" - das tue ich wirklich. Der faule Penner macht nichts - nichts, was ich dir sage. – ChssPly76

+0

, aber darauf können Sie sich nicht verlassen. es wird schließlich. – markus

1

Nein, sind Sie nicht. Es gibt keine Sicherheit in Bezug auf die Reihenfolge, in der der Motor die Reihen zurückgibt. Eine Tabelle ohne eindeutige ID ist sowieso nicht so eine Godo-Idee. In diesem Fall haben Sie definitiv Grund genug, einen zu verwenden.

1

Ähnlich wie bei einem Dateisystem wird, wenn die Tabelle nicht optimiert oder defragmentiert wurde, gelöschte Daten einen "Slot" freigeben, in den neue Daten eingefügt werden. Es wird nicht immer am Ende der Tabelle angehängt.

So sagen, Sie haben drei Reihen: A, B, C

Wenn Sie B löschen, dann wird Ihr Tisch im Wesentlichen wie ein Blick, [freier Raum], C

Also, wenn Sie D INSERT INTO Ihr Tisch sieht jetzt so aus: A, D, C

Ihre beste Wette ist es, eine einzigartige Autoinkrementierungs-Taste zu verwenden. Dies beschleunigt auch Abfragen.

Verwandte Themen