-
SQL und Reihenfolge der angezeigten Sätze
Hallo *all,
ich habe da mal ne Verständnisfrage:
Ich habe mir eine LF (dat004) angelegt die einen Schlüssel mit 3 Segmenten hat.
Ich hätte jetzt erwartet das wenn ich mit sql ein select * from dat004 mache, ich die Daten in der Reihenfolge zu sehen bekomme wie ich den Key angelegt habe. Dem ist aber nicht so.
Kann mir jemand sagen warum das so ist?
GG
-
SQL kümmert sich nie um die Reihenfolge, die in einer logischen Datei angegeben ist. Du kannst dich bei SQL niemals auf eine bestimmte Ergebnissortierung verlassen, wenn du sie nicht explizit angibst. Selbst wenn du dieselbe Abfrage durchführst, kann es theoretisch zu einer anderen Sortierung kommen, da der Optimizer sich vielleicht für einen anderen Zugriffspfad entscheidet.
Deshalb solltest du die Sortierung immer mit ORDER BY selbst bestimmen.
Dieter
-
SQL nimmt immer die PF, egal welche LF du angibst.
Die Sortierung hängt dann von der Where-Klausel b, mit der ein Index ermittelt wird.
Wird "Eingangsfolge" gewählt entspricht die Sortierung der PF-Satznummer.
Explizite Sortierung gibt es nur per "Order BY", dafür ist das da.
-
Schade, ist ja dann immder doppelt gemoppelt.
Ich prüfe zwar in der Regel mit Query, aber auf die schnelle halt mit SQL und da wäre es halt schön gewesen wenn die Kiste nicht nur die Felder berücksichtigt sondern auch die Sortierung. Die selects und Omits übernimmt sie ja auch.
Wer weiß was sich die Entwickler dabei gedacht haben nur 70% aus der LF zu berücksichtigen.
GG
-
Sei froh, daß sie überhaupt zugelassen haben, daß man eine logische Datei mit Satzauswahl angeben darf.
-
Die LF mit Select/Omit ist ein Spezialfall der AS/400 und nicht SQL-Standard.
Mit SQL wäre das eine View und die hat keinen Schlüssel.
Genau wie eine View wird diese LF nun verwendet.
Schlüssel werden erst später ermittelt (für die Zugriffe) und ggf. verwendet, wobei Views (wie diese LF) dann außen vor sind.
-
Nur nochmals zum besseren Verständnis.
Wird in einem SQL-Statement eine DDS beschriebene logische Datei angegeben, wird vor Release 7.1 TR5 die Abfrage von der alten CQE (Classic Query Engine) ausgeführt. Der Grund liegt darin, dass bei Verwendung von DDS beschriebenen logischen Dateien, die DDS-Definition analysiert werden muss, was vor Release 7.1 TR5 nur von dem alten Optimizer ausgeführt werden konnte. Aus der DDS-Definition werden Feld-Auswahl, Join-Informationen und Select-/Omit-Anweisungen herausgefiltert und das eigentliche SQL-Statement basierend auf diesen Informationen neu geschrieben.
Erst nachdem die Abfrage neu geschrieben wurde, erfolgt die eigenltiche Optimierung.
Zu diesem Zeitpunkt weiß der Optimizer nicht (mehr), dass ursprünglich eine DDS beschriebene logische Datei mit (oder gar mit welchem) Schlüssel angegeben wurde.
Das oberste Ziel bei der Optimirung ist es den Weg zu finden über den am schnellsten an die Daten herangekommen werden kann. Manchmal entspricht der beste Zugriffsweg (SQL Index oder DDS beschriebene logische Datei) nicht der gewünschten Sortierung, da die selektierten Daten notfalls zwischengespeichert und erst am Schluss sortiert werden.
Deshalb gilt die Regel, wenn eine bestimmte Sortierung erforderlich ist, muss eine Order By-Anweisung angegeben werden.
Birgitta
-
... das mit CQE und SQE ist doch alles Banane, dieses Verhalten, dass eine View keine Sortierung hat und dass man die Reihenfolge der Query engine überlässt, wenn man kein Order by angibt, ist durchgängiger Standard in SQL.
Der Hintergrund dessen ist, dass Views keine maintenance benötigen. Best Practice in SQL ist ausschließlich über Views zuzugreifen, um die Anwendung von der Implementierung der Datenbank maximal zu entkoppeln. In der Anwendung arbeitet man dann fast ausschließlich mit simplen select * from (order ba nicht vergessen!!!) statements und (fast) die komplette Logik des Zusammenklapperns der Daten findet innerhalb der Datenbank statt und belastet den Entwickler nicht. Damit das dann brummt, müssen passende Indexe angelegt werden, was auch nachgelagert passieren kann.
D*B
-
Hallo, freue mich jetzt schon auf das awk mit demThema embedde SQL welche im Februar stattfindet
bin gespannt was ich wieder dazu lerne
gg
Similar Threads
-
By Peet in forum NEWSboard Programmierung
Antworten: 6
Letzter Beitrag: 29-10-14, 08:05
-
By malzusrex in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 19-05-03, 13:48
-
By holly in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 31-01-03, 09:08
-
By heynem in forum IBM i Hauptforum
Antworten: 7
Letzter Beitrag: 05-12-02, 08:59
-
By Wirnitzer in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 07-08-01, 19:59
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks