# Tabelle sortieren. Wie?



## gondor (11. Januar 2005)

hallo!

wie kann ich folgendes realisieren?

ich schreibe daten in eine tabelle... ganz normal. möglich ist weitere daten in diese
tabelle einzufügen, die dann einfach unter die anderen gesetzt werden. danach soll 
sich die tabelle nach dem datum (datetime) sortieren, und nicht nach dem index....

die daten müssen also in der tabelle sortiert festgeschrieben sein...

1x schreiben:

2004-12-30 10:00:01 wert1 wert2
2004-12-30 10:00:02 wert1 wert2

weiteres schreiben:

2004-12-31 11:00:00 wert1 wert2
2004-12-31 11:00:01 wert1 wert2

tabelle:

1 2004-12-30 10:00:01 wert1 wert2
2 2004-12-30 10:00:02 wert1 wert2
3 2004-12-29 11:00:00 wert1 wert2
4 2004-12-29 11:00:01 wert1 wert2

dann sortieren:

3 2004-12-29 11:00:00 wert1 wert2
4 2004-12-29 11:00:01 wert1 wert2
1 2004-12-30 10:00:01 wert1 wert2
2 2004-12-30 10:00:02 wert1 wert2

wie lautet (für das sortieren) der befehl?

danke für die info...


----------



## redlama (11. Januar 2005)

Wieso willst Du die Tabelle sortieren?
Du kannst doch die Daten beim auslesen sortieren.
Und um was für eine Datenbank handelt es sich eigentlich?
MySQL? DB2? Oracle? Access? ...

redlama

P.S. Es gibt hier übrigens eine gültige Netiquette, die unter anderem auch die Einhaltung der Groß-/Kleinschreibung beinhaltet. Ich möchte Dich bitten, diese Netiquette einzuhalten, dann ist es für uns einfacher und übersichtlicher Deinen Beiträgen zu folgen und sie korrekt zu verstehen.


----------



## mawu (1. Februar 2005)

redlama hat gesagt.:
			
		

> Ich möchte Dich bitten, diese Netiquette einzuhalten, dann ist es für uns einfacher und übersichtlicher Deinen Beiträgen zu folgen und sie korrekt zu verstehen.
> *snip*
> Wissen ist Macht! Nichts wissen macht auch nichts, ...



Die gelinkte Netiquette beinhaltet auch das einhalten der Grammatikregeln und ich sehe da zwei Kommafehler.

Zum Thema: Datenbanken die wenig beschrieben und oft abgefragt werden sollten sortiert werden wenn die Daten eingefügt werden. Das reduziert massiv Serverload wenn die Abfragen laufen.


----------



## melmager (1. Februar 2005)

Ich kenne aus dem Handgelenk keine DB die ihre Datensätze in der DB selbst sortieren
kann -
Wenn es schnell gehen soll mit der Abfrage setzt man normalerweise ein index ein.


----------



## redlama (1. Februar 2005)

melmager hat gesagt.:
			
		

> Ich kenne aus dem Handgelenk keine DB die ihre Datensätze in der DB selbst sortieren
> kann -[...]


Ich auch nicht!
Ich denke die einzige Möglichkeit wäre dabei, die Daten auszulesen und sortiert in eine neue Tabelle zu speichern, die alte Tabelle zu löschen und die neue Tabelle dann umzubenennen, ...
Ist sicherlich alles andere als schön, aber es wäre eine Möglichkeit.

redlama

P.S. Danke für den Hinweis, mawu, ich werde versuchen, in Zukunft besser aufzupassen. Wobei ich zugeben muss, dass ich mit der Kommasetzung schon immer ein paar Probleme hatte und seit der Rechtschreibreform gänzlich durcheinander bin, ...


----------



## mawu (1. Februar 2005)

Access kanns. Auf der Oberfläche ist ein Knopf in der Toolleiste. Mir fällt aber auch keine andere an die es automatisch macht (oder wie Access das intern regelt). Ich weiss jedoch das viele Anwendungen das Sortieren der Datenbank dem Anlegen eines Indexes vorziehen. Indexe haben die Angewohnheit manchmal verloren zu gehen. Die Anwendungen ich kenne machen das manuell im Code. Wobei ich mich nicht mit richtig grossen Datanbanken ala Oracle auskenne. Ich kenne Paradox/Access/SQL/DB.


----------



## mawu (1. Februar 2005)

Hier ist was in SQL

ALTER TABLE table_name ORDER BY Spalte;

Könnte gehen ist aber nicht getestet. (C) Der Random-Tabelle-Sortieren Tread.


----------



## redlama (1. Februar 2005)

mawu hat gesagt.:
			
		

> Access kanns. Auf der Oberfläche ist ein Knopf in der Toolleiste. Mir fällt aber auch keine andere an die es automatisch macht (oder wie Access das intern regelt). Ich weiss jedoch das viele Anwendungen das Sortieren der Datenbank dem Anlegen eines Indexes vorziehen. Indexe haben die Angewohnheit manchmal verloren zu gehen. Die Anwendungen ich kenne machen das manuell im Code. Wobei ich mich nicht mit richtig grossen Datanbanken ala Oracle auskenne. Ich kenne Paradox/Access/SQL/DB.


Also ich arbeite ausschließlich mit MySQL und da ist mir noch *nie* ein index bzw. Primary Key verloren gegangen.
Desweiteren würde ich immer einen Primary Key anlegen, denn bei Tabellen mit rund 1,5 Mio Datensätzen kann das selektieren bestimmter Daten ohne Primary Key schon eine Weile dauern, ...

redlama


----------



## mawu (1. Februar 2005)

Sollten normalerweise nicht. Aber besonders wer mit älteren Delphi Versionen arbeitet und die dort angebotene BDE benutzt weiss was ich meine. Das ist noch nicht einmal ein Problem der unterliegenden Datenbank sondern die BDE ist einfach buggy. Keine Ahnung was neuere Delphis machen - die BDE ist immer noch mitgelieftert - aber Borland hat den Support für die BDE eingestellt und liefert nun bessere Komponenten mit.


----------



## Charliee (19. April 2010)

Falls das Problem immer noch besteht!

z.B.

ALTER TABLE 'xy_ungeklärt' ORDER BY 'datum' DESC;


----------



## tombe (19. April 2010)

Charliee hat gesagt.:


> Falls das Problem immer noch besteht!



Genau, seit nun rund *5 Jahren *versucht gondor vergebens dieses Problem zu lösen und hat es bisher nicht geschafft.


----------



## Biber2 (19. April 2010)

Moin tombe,



tombe hat gesagt.:


> Genau, seit nun rund *5 Jahren *versucht gondor vergebens dieses Problem zu lösen und hat es bisher nicht geschafft.



Aber er wird sich bestimmt freuen wie doll, wenn er jetzt endlich die durchschnittlichen Schneeflockengrößen in Großropperhausen in den Vor-Silvesternächten Anno 2004 chronologisch sortiert speichern kann.

Grüße
Biber


----------



## gorefest (20. April 2010)

Hallo, Forum!

Eine gescheite (tm) Datenbank kann die Daten anhand eines INDEX sortiert ausgeben. Die Reihenfolge der Daten in einer Datenbanktabelle ist Sache des Datenbankservers und NICHT vorhersagbar. Wenn es Produkte gibt, die diese Funktion unterstützen, ist das sicher schön, aber letztendlich eine Besonderheit, die sich ausserhalb der Standards für relationale DBMSe bewegt. 

Das heisst im Klartext: Wer sortierte Daten aus einer Datenbank will, _MUSS_ ein ORDER BY angeben. Sinn eines Datenbankservers ist es, eine Abstraktionsschicht für die Datenhaltung bereitzustellen. Eine Ausnahme bilden hier lediglich embedded Datenbanken, die kein SQL sprechen und "von Hand" eingelesen werden müssen.

Eine Tabelle, die häufig abgefragt wird, kann man i.d.R. bei der Anlage passend konfigurieren. Es gilt hier prinzipiell, dass Indizes in Richtung der Sortierung angelegt werden. Zumindestens ORACLE, POSTGRESQL und DB2 unterstützen das sogenannte CLUSTERING von Tabellen, welche die Datenhaltung in der Tabelle in Bezug zu einem existierenden Index optimiert (Bei MYSQL dürfte das Storage-Engine-spezifisch sein). 

Es gilt darüber hinaus, dass die DB-Server bzw. die Sitzungskonfiguration ebenfalls die Performance beeinflussen kann. Wenn man beispielsweise den Bufferpool bei INNODB Tabellen groß genug wählt, liegt eine häufig frequentierte Tabelle im Buffer cache und wird pfeilschnell im Speicher sortiert.

Wenn die Datenmenge so groß ist (>10Mio Records), dass eine optimierte Abfrage zur Sortierung herhalten muss, kann man auf das Clustering oder auch auf Partitionierungsfeatures zurückgreifen (was nur was bringt, wenn die Datenmenge nach irgendwas eingeschränkt wird und nach irgendwas partitioniert werden kann).
Gerade bei MySQL sollte man die Menge der selektierten Columns klein halten und wirklich nur das in die Selektion nehmen, was man braucht, da die Menge der Spalten massiv Einfluss auf die Abfrage- und Sortierperformance nimmt.

just my 2 cents.

Grüße 
gore


----------



## Alex F. (20. April 2010)

Da ich davon ausgehe in diesem "uralten" Thread keine neuen Erkenntnisse zu finden würde ich dafür plädieren diesen ein für alle mal zu schliessen


----------



## Biber2 (20. April 2010)

Moin Alex F & gorefest,



Alex F. hat gesagt.:


> .......würde ich dafür plädieren diesen ein für alle mal zu schliessen


Jepp, unterstütze ich, allerdings...



Alex F. hat gesagt.:


> Da ich davon ausgehe in diesem "uralten" Thread keine neuen Erkenntnisse zu finden



...allerdings würde ich gern vor dem Schliessen noch ein paar Fussnoten anmerken für künftige MitleserInnen.

a) irreführend ist mawus Kommentar vom Feb 2005 "Hier ist was in SQL ....ALTER TABLE table_name ORDER BY Spalte;"
Dieses Feature hat nur (afaik) MySQL jemals ins Angebot genommen - ist kein SQL-Standard.
Und eigentlich wie gorefest schrieb auch nichts mit den SQL-Konzepten Vereinzubarendes.

b) Und auch bei MySQL ist es mehr und häufiger im Bugreport zu lesen als in der Doku.
In der deutschen Doku taucht es ab spätestens Version 5.1 nicht mehr auf  MySQL ALTER TABLE dt . In der  englischen Doku 5.1  wird es noch erwähnt.
Dort steht auch, wie gorefest diskutiert hat, dass es keinen Sinn macht z.b. bei der innoDB, sofern PRIMARY KEYS oder NOT NULL-Constraints verwendet werden, da dieses Physisch-analog-zu-logischer-Sortierung-Ablegen (Clustered Index) automatisch so praktiziert wird.

c) Und auch in allen Beiträgen, die ich eben bezüglich Nutzen und Sinnhaftigkeit dieses Features (wenn es denn syntaktisch funktioniert) überflogen habe ist die vorherrschende Bewertung "Thumps down".

Grüße
Biber


----------

