select Ergbnis in der Reihenfolge der Werte im Array

Fragen und Probleme rund um die Abfragespache SQL.
alexander_ro
Benutzer
Beiträge: 88
Registriert: So 12. Nov 2006, 12:29

Re: select Ergbnis in der Reihenfolge der Werte im Array

Beitrag von alexander_ro » Mi 22. Mai 2019, 15:47

Ich weiß das das so ist aber es wird nicht wirklich besser wenn man jede kleine 1:n Beziehung in eigene Tabellen verlegt. Zumal ich die Umsetzung der WortId in echtes Wort nur brauche wenn die Anwendung Informationen zum User ausgibt. Die Texte werden sonst in numerischer Form verarbeitet und dann habe ich mit einem Zugriff gleich den ganzen Text und muss das nicht erst aus mehreren Tabellen zusammen suchen. Das wird echt nicht schneller durch mehr Tabellen weil es viele eher kleine Texte sind die in einer eigenen Tabelle dann Millionen Zuordnungen ergeben.

Ich mach das jetzt mal so wie Du es vorgeschlagen hast und schau wie es sich entwickelt. Die schnellste Version ist die von akretschmer die er aus meiner leicht falschen Version gebaut hat. Ich habe einen kleinen automatischen Test in das Programm integriert um mal zu sehen ob es vorkommt das die Reihenfolge durcheinander gerät. Ich glaube ja eher das es nicht passiert. In der Entwicklung kann man das ja leicht machen und bis zu ersten fertigen Version wird sicher noch einige Zeit vergehen. Das nächste PostgreSQL Upgrade steht auch schon an.

castorp
Erfahrener Benutzer
Beiträge: 1125
Registriert: Sa 27. Jun 2009, 22:24
Wohnort: Bayern

Re: select Ergbnis in der Reihenfolge der Werte im Array

Beitrag von castorp » Mi 22. Mai 2019, 16:28

alexander_ro hat geschrieben:
Mi 22. Mai 2019, 15:47
Ich weiß das das so ist aber es wird nicht wirklich besser wenn man jede kleine 1:n Beziehung in eigene Tabellen verlegt.
Das stimmt so nicht. Eine relationale Datenbank ist genau dafür gemacht, nicht dafür arrays bei jeder Verwendung in eine normalisierte Form zu überführen. Dieses "Joins bzw. zusätzliche Tabellen vermeiden um jeden Preis" ist eine Unsitte die komplett ignoriert wofür relationale Datenbank optimiert sind. Wenn dieser unsinnige "Aberglaube" wirklich wahr wäre, wären relationale Datenbank anders aufgebaut.
Die schnellste Version ist die von akretschmer
Das überrascht mich wirklich, denn letztendlich machen beide das Gleiche. Um wieviel schneller ist denn die andere Version? Hast Du mal getestet um wieviel schneller eine Abfrage mit einem anständig normalisierten Modell ist?
A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'

akretschmer
Erfahrener Benutzer
Beiträge: 7612
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Re: select Ergbnis in der Reihenfolge der Werte im Array

Beitrag von akretschmer » Mi 22. Mai 2019, 16:39

ich geb castorp hier Recht. Wenn Du das schon mit den Arrays machst, dann solltest Du zumindest die von ihm gezeigte Lösung mit ordinality nutzen, sonst fliegt Dir das irgendwann um die Ohren.
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

alexander_ro
Benutzer
Beiträge: 88
Registriert: So 12. Nov 2006, 12:29

Re: select Ergbnis in der Reihenfolge der Werte im Array

Beitrag von alexander_ro » Mi 22. Mai 2019, 18:13

Du kennst das Datenbankmodell und die Anwendung im Detail?
Wie kommst Du darauf das ich zusätzliche Tabellen um jeden Preis vermeiden will?
Relationale Datenbanken können ganz bestimmt Anwendungsfälle sehr gut lösen aber eben nicht alle.

In der Tat gibt es anders Aufgebaute Datenbanken und zwar genau aus dem Grund das Relationale Datenbanken nicht alle Probleme gut lösen können. Das ist eine recht alte Erkenntnis der Datenbanken Produzenten allen voran IBM die mit DB2 eine der ersten hatten. Bin mir nicht sicher aber ich glaube die haben die auch erfunden.

All Deine schöne Relationale Theorie fliegt Dir um die Ohren wenn sie an den Gesetzen der Physik zerschellt. Das Thema ist z.B Festplatten und Speicher IO und die Probleme folgen keiner Relationalen Theorie. Fakt ist: mehr zugriffe = mehr langsam. Du kannst das gerne mal ausprobieren eine eigene Mapping Tabelle ist langsamer deutlich langsamer.

Die zwei Versionen liefern das gleiche Ergebnis aber auf unterschiedlichem Weg. Der unterschiedliche Weg wird wohl verantwortlich sein das es nicht die gleiche Laufzeit hat. Alleine schon der nötig Sort kostet nicht wenig Zeit nur mal so als Beispiel für die Unterschiede. Ein Sort kostet auch Zeit wenn er gar nichts zum sortieren findet.

@akretschmer: steht doch schon in dem Post oben das ich die benutze. Ich lasse nur die andere mal mit laufen in der Entwicklung um zu sehen was es in der Praxis tut. Ist ja nicht wirklich Zeit kritisch eine Ausgabe für User. Ich will aber trotzdem wenigstens halbwegs schnelle Lösungen. Green IT ist wenn die CPU sich langweilt und trotzdem das Ergebnis am Bildschirm steht ... ;)

Antworten