Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SELECT * FROM (https://www.delphipraxis.net/7538-select-%2A.html)

Hansa 15. Aug 2003 11:44


SELECT * FROM
 
Hi,

es geht um den * in einem Select-Statement. Schreibe ich
Code:
Select * from <Table>
erhalte ich ja alle Felder der Tabelle zurück. Jetzt stellt sich die Frage, ob es sinnvoll ist, die tatsächlich benötigten Felder einzeln aufzuführen. Dadurch wird ja die übetragene Datenmenge erhöht. Andererseits ist es mehr Schreibarbeit und fehlerträchtiger, es ohne den Stern zu machen. Ich vergesse zum Beispiel immer die benötigte ID und wundere mich, daß ein Programm nicht wie gewünscht abläuft. Hat da jemand Erfahrungswerte dazu ?

Ah, noch was: wie wirkt sich das ganze bei einem Join aus ? Da dürfte es wohl schon anders aussehen, wie bei einer einzigen Tabelle.

alcaeus 15. Aug 2003 11:55

Re: SELECT * FROM
 
Also, meiner Meinung nach ist die Einzeln-Auflisten-Methode geschickter, und zwar deswegen, da bei einem Datenbankumbau normalerweise auch alle Programme, die auf diese DB zugreifen, geändert werden müssen. Falls du "SELECT * FROM" verwendest, fällt dir dies nicht sofort auf, da * alle Spalten selektiert. Im Netz ist das auch ein Performanceproblem, da "SELECT * FROM TABELLE" alle Datensätze bringt (=große Datenmenge). Deshalb gilt: lieber viel schreiben, zwei mal mehr nachschauen, aber dafür ein effizienteres Programm haben. (Meine Meinung)

Lemmy 15. Aug 2003 11:58

Re: SELECT * FROM
 
Hi Hansa,

Zitat:

Zitat von Hansa
Jetzt stellt sich die Frage, ob es sinnvoll ist, die tatsächlich benötigten Felder einzeln aufzuführen. Dadurch wird ja die übetragene Datenmenge erhöht.

??? Ähh.. Du meinst verringert, oder??

Grundsätzlich ist ein "Select * from" bei einem SQL-Server eine Art russisches Roulette: Schafft es der Server oder steht der Betrieb still...

Eigentlich sollte jede SQL-Abfrage die an den Server geht entsprechend der benötigten Datenmenge angepasst sein, d.h. brauchst Du aus der Tabelle Kunde nur die ID und den Namen, dann hol Dir gefälligst auch nur das und nicht den anderen Rotz auch noch.

Klar ist das ein "Mehraufwand" aber wenn Du es nicht machst ruft Dich spätestens der erste Anwender mit mehr als nur 10 Datensätzen an und beschwert sich weil die Datenbank so langsam ist....

Grüße
Lemmy

Sharky 15. Aug 2003 11:58

Re: SELECT * FROM
 
Zitat:

Zitat von Hansa
... Jetzt stellt sich die Frage, ob es sinnvoll ist, die tatsächlich benötigten Felder einzeln aufzuführen...

Wie heisst es so schön "Kommt darauf an".

Wenn Du Daten z.B. in einem Grid anzeigne möchtest, die Tabelle 10,20,30 oder mehr Felder besitzt und Du im Grid aber nur 3 anzeigen möchtest bekommst Du einen riesen geschwindigkeits Vorteil.

Bei mir war das mit der Kunden übersicht so. Ich habe auch ein
SQL-Code:
SELECT * FROM kunden
gemacht und es hat relativ lange gedauert bis das Grid gefüllt war. Dabei werden in dem Grid nur Name, PLZ und Ort angezeigt. Durch eine Reduzierung der auszugebenden Felder auf:
kunden_id, name, ort, plz habe ich die Anzeigegeschwindigkeit mehr als verdoppelt.

Solltest Du andererseits von sagen wir 20 Feldern nur 2 Stück nicht benötigen steht der Aufwand IMHO in keinem Verhältnis zum nutzen. Es seiden die beiden Felder sind BLOBs oder Memos mit riesen Datenmengen.

Hansa 15. Aug 2003 12:08

Re: SELECT * FROM
 
Uff, habt ihr sonst nichts zu tun ? :lol: Das ist ja schon phänomenal. Also gut, wisst ihr wie ich das jetzt mache ? Bzw. ist das schon so gemacht. Ich baue mir im IBexpert das SQL mit * zusammen. Dann reduziere ich das auf die benötigten Felder. Dabei passieren Fehler, weil ich zuviel des Guten weglasse oder auch zuwenig. Das Ergebnis schau ich mir an, also die Rohdaten. Kommt keine Fehlermeldung mehr, so kopiere ich den kompletten fehlerfreien String in das Delphi Programm und basta. Das hat jetzt schon 2mal so funktioniert.

alcaeus 15. Aug 2003 12:13

Re: SELECT * FROM
 
@ Hansa: nicht umsonst bis du Gold-Member, das funzt nämlich wirklich perfekt, ich mache genau das gleiche, war mir zu faul alle Spalten zu merken

Sharky 15. Aug 2003 12:18

Re: SELECT * FROM
 
Zitat:

Zitat von Hansa
Uff, habt ihr sonst nichts zu tun ?

Bei dem Wetter? Nö :lol:

Zitat:

... fehlerfreien String in das Delphi Programm und basta. Das hat jetzt schon 2mal so funktioniert.
hihi.... mir ist es schon des öfteren passiert das ich ein Feld vergessen habe. Die Felder die für die Anzeige oder das direckte Bearbeiten benötigt werden "natürlich" nicht. aber dann habe ich wild losprogrammiert und wollte plötzlich auf ein Feld zugreifen das es nicht gab *klonk*

Aber für solche Dinge habe ich ja meine Beta-Test (auf deutsch: Anwender :lol: )

Hansa 15. Aug 2003 12:31

Re: SELECT * FROM
 
Das ganze hat noch einen Vorteil, zumindest für diejenigen, die (so wie ich) die SQL-Syntax nicht im Blut haben. 8) Dadurch, erst mal den * zu benutzen, kann der Join besser/leichter aufgebaut werden. In dem konkreten Fall hier, betrifft dies nämlich eine Tabelle mit sehr vielen und eine mit sehr wenigen Datensätzen und auch Feldern. Einmal hatte ich 3222 DS in der Datenmenge, das war ein Fehler im JOIN. Jetzt sind es noch 32, was stimmt. Und da habe ich dann noch 49 von 52 Feldern rausgeschmissen. Ja, schon krass, wenn man von über 50 Feldern nur 3 braucht. :mrgreen: Schätze mal, daß durch diese Maßnahmen der Datenverkehr auf maximal 5 % reduziert ist.

Mauli 15. Aug 2003 12:45

Re: SELECT * FROM
 
Dumme Frage: was ist der 'IBexpert' :?:

Hansa 15. Aug 2003 12:49

Re: SELECT * FROM
 
So was wie die schwachsinnige IBconsole, halt nur besser. 8) Hier (bei Lemmy) steht sogar ein Tuto von mir, mit Links etc.:

www.delphi-tutorials.de


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:49 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz