von bbastix |
...keine Ahnung, wer mir den Floh ins Ohr gesetzt hat. Hab auch nich keinen Test gemacht, klingt für mich aber völlig logisch.
Abgesehen davon geht es mir ja auch um die Veränderung meiner DB-Struktur, da ich dadurch einiges an Übersicht gewinnen würde.
Basti |
von m3rlin |
SELECT Statements sind auch mit ORDER BY keine Resourcen-Fresser. Wer hat Dir denn den Floh ins Ohr gesetzt 
Wenn Du der entsprechenden Spalte einen Index verpasst, beschleunigts Du die Anfrage eventuell etwas. Allerdings hat das den Nachteil, dass die Datenbank nachher etwas mehr Speicher verbraucht und UPDATE, INSERT und DELETE Statements auf dieser Tabelle länger brauchen als vorher, weil halt der entsprechende Index auch noch aktualsiert werden muss.
Zum Ersetzen:
Schau Dir mal das Thema Join/Verbund an, vielleicht ist es das was Du suchts.
Übrigens wenn Du dich mit JOINS beschäftigts, stößt Du langsam in Gebiete vor in denen echte Ressourcen-Fresser zu Hause sind 
---
Webspace Preisvergleich Server Preisvergleich |
von bbastix |
...tausend bunte Antworten:
Cut and Paste meint: Datensätze auslesen, zwischenspeichern, wieder reinschreiben. Wenn ich einfach nur ein UPDATE mache, dann bleibt der Datensatz ja an der Position in der Tabelle.
Ein SELECT ist nicht ressourcenfressend, jedoch ein ORDER BY! Da muss ja jeder Datensatz mit anderen verglichen werden und sortiert werden. Bei großen Datenbanken ist das eine unnötige Belastung, wenn es auch anders ginge, aber das weiß ich eben nicht, ob ich mich auf die interne Indizierung so verlassen kann, da ich nicht weiß, wie diese funktioniert.
Deine Frage zu ID und Parent_ID:
Ich erkläre es mal ganz von vorne:
Mit ID und Parent_ID strukturiere ich meine Datensätze, ähnlich, wie es in einem Dateimanagement-System Verzeichnisse (oder Ordner bei Win) und einfache Dateien gibt:
Jeder Datensatz hat eine ID und hat in der Parent_ID die ID des direkt übergeortneten Datensatzes, der dann eben ein Verzeichnis ist. Nun ist es aber für mich ziemlich unübersichtlich mit diesen ID's zu arbeiten, da über mein CMS mehrere Domains angeschlossen sind mit unteschiedlichen Seitenstrukturtabellen. D.h. ein Forum-Modul würde von der einen Domain aus mit der ID=20 angesrochen werden, von der anderen mit ID=5. Deshalb und aus anderen Gründen existiert zu jeder ID auch ein eindeutiger Name (im Beispiel: forum). Nun existiert also eine Seitenstrukturtabelle:
1:
2:
3:
4:
5:
6:
7: |
| id | p_id | name | ...
| 1 | 0 | startseite | ...
| 2 | 1 | austausch
| 3 | 2 | forum
| 4 | 2 | online_council
|
Das ganze soll aber so aussehen:
1:
2:
3:
4:
5:
6:
7: |
| name | p_name | ...
| startseite | NULL
| austausch | startseite
| forum | austausch
| online_council | austausch
|
comprendes?
Nun müssen halt aber z.B. forum und online-council in einer bestimmten Reihenfolge erscheinen, so dass im Menu nachher (das besteht aus Registerkartenreitern) also entweder [ forum ] [ online_council ] oder eben in umgekehrter Reihenfolge erscheint. Hier kann ich nicht mehr mit ORDER BY arbeiten (alphabetisch solls ja nicht sortiert sein) und ich möchte aber auch keine Neue Objekteigenschaft einführen (ORDER BY reihenfolge). Wenn ich jezt aber den Datensatz 'forum' lösche und neu anlege, dann liegt er in der internen MySQL-Indizierung am Ende der Tabelle, also hinter 'online_council' und genau das würde ich gerne nutzen!
Ich hoffe, das jetzt klar ist, was ich meine.
Basti |
von m3rlin |
tausend bunte Frage-Zeichen 
Cut and Paste in einer Datenbank? Was? Wie?
MySQL -Tabellen kannst Du einmalig nach Spalten sortieren lassen. Schau mal im phpMyAdmin, da gibts sogar irgendwo nen entsprechenden Button.
Ansonsten, was soll denn an einem einfachen SELECT-Statement unnötig Ressourcen fressen und was meinst Du mit "Indizierung über ID und P_ID durch SEITE und PARENT_SEITE ersetzen"?
---
Webspace Preisvergleich Server Preisvergleich |
von bbastix |
Wie sind die Datensätze in MySQL sortiert? Chronologisch? Und: ändert sich die Reihenfolge unter bestimmten umständen? Und: Kann ich auf die Reihenfolge Einfluss nehmen (ausser via cut and paste)?
Hintergrund:
Eine Tabelle, die die Struktur der Seite verwaltet:
id | p_id | name | ....
Jetzt lese ich alle Menupunkte eines Verzeichnisses sortiert aus (also SELECT * FROM ... WHERE p_id = 15). Bislang sortiere ich dann via ORDER BY id ASC. Das frisst aber unnötig Ressourcen und ich möchte die Indizierung über ID und P_ID gerne durch SEITE und PARENT_SEITE ersetzen. Dann allerdings könnte ich die einzelnen Datensätze ja nur alphabetisch sortieren
Meine Idee:
Da die Datensätze intern ja ohnehin indiziert sind benutze ich das doch (wenn es geht).
Basti |
|