WebWork Magazin - Webseiten erstellen lassen, Online Medien, html

Webhoster, Webhosting Provider und Domain registrieren

Home | Registrieren | Einloggen | Suchen | Aktuelles | GSL-Webservice | Suleitec Webhosting
Reparatur-Forum | Elektro forum | Ersatzteilshop Haushalt und Elektronik


Homepage und Webhosting-Forum

Scripte und Programme für PHP, MYSQL. Diskussionen zur Programmierung im Web. Fragen zu CMS, Blogsoftware, Shops, Newsletter und vielen weiteren Scripten.


Forum » PHP & MySQL » ::: MySQL - interne Indizierung ::: » Antworten
Benutzername:
Passwort: Passwort vergessen?
Inhalt der Nachricht: Fett | Kursiv | Unterstrichen | Link | Bild | Smiley | Zitat | Zentriert | Quellcode| Kleiner Text
Optionen: Emailbenachrichtigung bei Antworten
 

Die letzten 5 Postings in diesem Thema » Alle anzeigen
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

Nach oben