mysql-Ergebnisse nach Länge eines Wertes sortieren
Marc
- datenbank
0 Vinzenz Mai0 Chris0 wahsaga0 Chris
0 Vinzenz Mai
Ist es möglich, mit mysql Ergebisse einer DB-Anfrag anch der Länge des Inhalts eines Feldes sortieren? Quasi so:
SELECT * FROM tabelle WHERE ... ORDER BY <Länge des Wertes in einer bestimmten Spalte>
?
Hallo Marc,
Ist es möglich, mit mysql Ergebisse einer DB-Anfrag anch der Länge des Inhalts eines Feldes sortieren? Quasi so:
SELECT * FROM tabelle WHERE ... ORDER BY <Länge des Wertes in einer bestimmten Spalte>
es gibt bei MySQL die Stringfunktionen LENGTH() und CHAR_LENGTH(), siehe MySQL-Handbuch, Abschnitt Stringfunktionen. Diese können Dir weiterhelfen.
Freundliche Grüße
Vinzenz
Hallo Marc,
hallo Vinzenz,
Ist es möglich, mit mysql Ergebisse einer DB-Anfrag anch der Länge des Inhalts eines Feldes sortieren? Quasi so:
SELECT * FROM tabelle WHERE ... ORDER BY <Länge des Wertes in einer bestimmten Spalte>
es gibt bei MySQL die Stringfunktionen LENGTH() und CHAR_LENGTH(), siehe MySQL-Handbuch, Abschnitt Stringfunktionen. Diese können Dir weiterhelfen.
Das macht die Abfrage allerdings ab einer mir unbekannten Größe der Ergebnismenge verflixt langsam. Ich habe leider noch nicht herausgefunden, von welchen Randbedingungen das genau abhängig ist. Es gibt aber irgendwann einen gewaltigen Sprung in der Ausführungszeit.
LG
Chris
hi,
Das macht die Abfrage allerdings ab einer mir unbekannten Größe der Ergebnismenge verflixt langsam. Ich habe leider noch nicht herausgefunden, von welchen Randbedingungen das genau abhängig ist. Es gibt aber irgendwann einen gewaltigen Sprung in der Ausführungszeit.
Vielleicht ab dem Punkt, wo die Ergebnismenge die Grenze sprengt, bis zu der sie noch im Hauptspeicher haltbar ist, und temporär auf Platte ausgelagert werden muss?
gruß,
wahsaga
Hallo Wahsage,
Das macht die Abfrage allerdings ab einer mir unbekannten Größe der Ergebnismenge verflixt langsam. Ich habe leider noch nicht herausgefunden, von welchen Randbedingungen das genau abhängig ist. Es gibt aber irgendwann einen gewaltigen Sprung in der Ausführungszeit.
Vielleicht ab dem Punkt, wo die Ergebnismenge die Grenze sprengt, bis zu der sie noch im Hauptspeicher haltbar ist, und temporär auf Platte ausgelagert werden muss?
Das lässt sich nicht so nachvollziehen.
Der Sprung findet auf jeden Fall schon sehr viel eher statt, als dass der verfügbare Speicher laut my.ini mit dem reinen Ergebnis gefüllt wäre. Allerdings muss man doch auch einen erheblichen Speicheranteil für den Temporärindex berücksichtigen.
Dass das System swapt, konnte ich noch nicht feststellen.
Die Beobachtung gilt übrigens für alle Sortierungen über berechnete Werte.
LG
Chris
Hallo Chris,
Das macht die Abfrage allerdings ab einer mir unbekannten Größe der Ergebnismenge verflixt langsam.
danke für diesen wichtigen Hinweis. Ich hätte hinzufügen müssen, dass eine Sortierung nach einer berechneten Spalte nur für kleine Ergebnismengen sinnvoll ist.
Die wenigsten DBMS sind in der Lage, für berechnete Spalten Indizes zu erstellen. Sortieren ohne Index ist halt immer lahm, kommt die von wahsaga angesprochene Grenze hinzu, wird es natürlich noch schlimmer. Andererseits kann es gerade bei der vom OP verwendeten Funktion vorkommen, dass ein Index auf die berechnete Spalte noch nicht einmal viel bringt.
Freundliche Grüße
Vinzenz