SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Das Zend Framework

Das Zend Framework zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP Grundlagen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Thema geschlossen
 
Themen-Optionen Ansicht
  #1  
Alt 12.08.2002, 11:48:13
Benutzerbild von CyberAge
CyberAge CyberAge ist offline
Junior Member
 
Registriert seit: Apr 2002
Alter: 42
Beiträge: 282
CyberAge eine Nachricht über ICQ schicken CyberAge eine Nachricht über AIM schicken CyberAge eine Nachricht über Yahoo! schicken
Ich willst jetzt wissen - Select * oder nicht Select *

Also es kommt ja immer wieder die diskussion auf, ob select * gut oder schlecht ist, wenn man auf eine datenbank zugreift. Also ich finde, es ist in ordnung, da es einem sehr viel arbeit erspart! was ist wenn man eine tabelle hat, die 123* spalten hat und man nur 15 davon nicht braucht. ich möchte mal ehrlich wissen, wer sich die arbeit machen würde, alle spalten namentlich in die Select-anweisung aufzunehmen. Dort liegt doch auch gleich wieder eine Fehlerquelle: einmal ein ` vergessen und schon hat man einen SQL-Fehler und darf in die 123* spaltennamen in der Select-anweisung suchen.

Ich verwende, außer wenn ich wirklich nur eine oder 2 spalten brauche so gut wie immer Select * und meine Projekte laufen ohne probleme in sachen lauffähigkeit und geschwindigkeit.

Ich möchte es nun wissen: Was ist besser? Select * oder nicht Select * ???

Bitte zitiert aber nicht bisher geschriebenes (also hier im forum) sondern fasst es mit eigenen worten!
__________________
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Im Leben ist nichts umsonst!
Selbst der Tod kostet das Leben!
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  #2  
Alt 12.08.2002, 12:08:22
HS-78 HS-78 ist offline
Anfänger
 
Registriert seit: Jun 2002
Ort: Brandenburg
Alter: 45
Beiträge: 68
Also select * ist nicht besser. Bisher habe ich es zwar auch immer genutzt, aber nach der Diskussion hier hab ich in meinem aktuellen Projekt das umgestellt. Und select * hat folgenden Nachteil:

Es ist fast immer langsamer (selbst getestet), bei mir so zwischen 0-40% je nach Abfrage.

Es besteht die Gefahr das dieser Unterschied noch größer wird wenn eine Tabelle um neue Spalten erweitert wird.

Mit select spalte, .... hat man auch gleich den Vorteil das man sieht was nun eigentlich abgefragt wird. Das finde ich mittlerweile ganz gut.

Bezüglich der Übersichtlichkeit bei Tabellen mit 123* Spalten kann ich nur sagen das meiner Meinung nach etwas faul ist wenn eine Tabelle soviele Spalten hat ;-)

Es gibt aber auch Fälle, so wie von Dir schon angedeutet, da nehme ich auch Select *. So in meiner AdressDB, wo ich bei der Anzeige der Adressen 15 von 16 Feldern brauche.

Aber insgesamt werde ich in Zukunft vermeiden select * zu nutzen.

So, das waren meine 5 cents dazu,

HS.
  #3  
Alt 12.08.2002, 12:18:06
Benutzerbild von SPiC
SPiC SPiC ist offline
Junior Member
 
Registriert seit: Aug 2002
Ort: Münster/Germany
Beiträge: 324
SPiC eine Nachricht über ICQ schicken
Sorry, CyberAge, aber ich quote mich mal ganz schnell selber...
Zitat:
Hmm, lasst mich es mit dem Blinker am Auto vergleichen. Du kannst auch gefahrlos abbiegen, ohne den Blinker zu setzen, wenn keine Autos auf der Straße sind. Bei vielen Autos kommt es ohne Blinker schon einmal zum Crash...
Mit anderen Worten: Bei kleinen Projekten läuft SELECT * noch ganz gut, aber sagen wir mal bei eBay wäre eine "SELECT * FROM Auktionen" warscheinlich der Grund für einen Systemcrash...
SELECT * oder nicht SELECT *, dass unterscheidet eben das eben zusammengeschusterte Script von der Heavy Duty Application.

Zu Deinem 123-Spalten-Beispiel (wer in Gottes Namen nimmt Tabellen mit mehr als 100 Spalten?):

Also nehmen wir einmal an, Du würdest 15.000 Datensätze (also z.B. eine Kundendatenbank von einem mittleren Unternehmen) haben. Wenn Du jetzt einen Result abfragst, selektierst Du 15 Datenfelder zu viel, dass heißt, bei einem Result von 1000 Datensätzen hättest Du 15.000 Datenfelder "Müll" selektiert, die gespeichert werden müssten, obwohl Du sie gar nicht verwendest... Dann nehm noch den Faktor "User" dazu, denn es wird ja meist parrallel an den Datenbanken gearbeitet et voila: Bei zehn Usern sind es über 150.000 Datenfeld umsponst (Du hast somit wertvolle Resourcen vergeudet, mit denen man locker 1 1/2 User mehr bedienen könnte (108000 Datenfelder/User).

Jetzt stelle Dir mal das ganze mit 10.000.000 Datensätzen vor!

By the way, in der Praxis werden Tabellen gesplittet, d.H. ein Key wird vergeben und verschiedene Datengruppen auf verschiedene Tabellen gesplittet z.B.

Tabelle PersDaten
ID|KdnNr|Name|Vorname...

Tabelle ServiceProfill
ID|Zuständiger Sachbearbeiter für Kunden|Typ des Services...

Tabelle LogistikDaten
ID|Lieferadresse|...

Tabelle BuchhaltungsDaten
ID|Rechnungsadresse|...

So können riesige Datenmengen übersichtlich sortiert werden.
Mal ehrlich: Welche Tabelle hat denn mehr als 20 Felder?

Außerdem ist es schlichtweg viel übersichtlicher, wenn Du direkt aus der SELECT-Anweisung die Namen der Selektierten Datenfelder ersehen kannst, so hat vor allem ein neuer Programmierer viel schneller den Überblick.

=:-) Sebastian

PS: Mich würde mal ein Beispiel interessieren, wo wirklich mehr als 100 Felder benötigt werden....
__________________
Member of the PHP Development Group

spic@php.net
www.php.net
  #4  
Alt 12.08.2002, 13:00:28
Progman Progman ist offline
Member
 
Registriert seit: Apr 2002
Beiträge: 821
Progman eine Nachricht über ICQ schicken
13.14. Warum soll ich nicht SELECT * schreiben?
http://www.dclp-faq.de/q-sql-select.html

Interessant ist es bei

SELECT COUNT(*) FROM tab

da soll man wieder * benutzen ;)
  #5  
Alt 12.08.2002, 13:08:57
Ben20
Guest
 
Beiträge: n/a
Ich habe früher im SELECT * benutzt, dann aber auf SELECT spaltenname umgestellt, da ich beim Programmieren meistens nicht mehr wußte in welcher Reihenfolge die Spalten in meiner Tabelle waren und ich ständig alles aufschreiben oder nachschauen mußte.
  #6  
Alt 12.08.2002, 13:16:24
Benutzerbild von CyberAge
CyberAge CyberAge ist offline
Junior Member
 
Registriert seit: Apr 2002
Alter: 42
Beiträge: 282
CyberAge eine Nachricht über ICQ schicken CyberAge eine Nachricht über AIM schicken CyberAge eine Nachricht über Yahoo! schicken
vielleicht kann ja mal einer ein beispiel schreiben, was die performance von select * gegenüber select `spalte` aufzeigt. Aber ich bitte darum, den quelltext offenzulegen, damit sich jeder über die richtigkeit des scriptes überzeugen kann. Ich hab leider keine zeit, muß gleich zur mittagschicht! ich bin ja mal gespannt auf die ergebnisse!
__________________
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Im Leben ist nichts umsonst!
Selbst der Tod kostet das Leben!
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  #7  
Alt 12.08.2002, 13:40:01
Benutzerbild von Matt
Matt Matt ist offline
Member
 
Registriert seit: Mar 2002
Ort: Port 80, localhost-city, 127/0/0/1
Beiträge: 878
könnt ihr ganz einfach selbst testen mit der mysql benchmark funktion.

anwendungsbeispiel:
select benchmark(10000,"select * from user");
select benchmark(10000,"select name, alter from user");

benchmark führt argument2 argument1-mal aus, also praktisch 10000 selects
die zeit, die das gebraucht hat, könnt ihr euch merken und mit einer anderen zeit vergleichen.
  #8  
Alt 12.08.2002, 14:00:57
Benutzerbild von SPiC
SPiC SPiC ist offline
Junior Member
 
Registriert seit: Aug 2002
Ort: Münster/Germany
Beiträge: 324
SPiC eine Nachricht über ICQ schicken
@Progman
SELECT COUNT() ist eine Sache für sich (von der Syntax her).
SELECT COUNT liefert die Anzahl der Datensätze zurück, nicht die Daten (wie SELECT * FROM es tut).

Der Paramenter COUNT(*) zählt alle Datensätze in der Datenbank, während z.B. COUNT(name) nur alle Datensätze im Feld "name" zählt, die nicht NULL (also nicht leer) sind.


Viele Grüße


=:-) Sebastian
__________________
Member of the PHP Development Group

spic@php.net
www.php.net
  #9  
Alt 12.08.2002, 14:56:10
Benutzerbild von Nev
Nev Nev ist offline
Member
 
Registriert seit: Feb 2002
Ort: Österreich / Wien
Alter: 43
Beiträge: 992
Hi @ll

Ich muß mich HS-78 anschliessen

Es ist schneller, und übersichtlicher.
Wenn ich aber 14 Felder von einer Tabele die 16 Spalten hat, brauche, dann werde ich auch * verwenden.

zu Count
da muß ich SPiC rechtgeben


PS:
Ich bin sehr Froh das SPiC den Weg in dieses Forum gefunden hat, er bringt wieder frischen Wind herrein.
bzw. er gibt sehr gerne sein Wissen weiter.
Ich hoffe das ich bald auch wieder etwas mehr Zeit habe und wir alle Zusammen ein gutes Team abliefern.

@SPiC das angebot für Self-Examples steht noch immer
__________________
Cu
Nev the XxX (Sven-Marcus Maderbacher)

Master of www.Burnworld.de
www.Nev-hilft.de die Seite für den Coder
  #10  
Alt 12.08.2002, 17:04:05
Benutzerbild von SPiC
SPiC SPiC ist offline
Junior Member
 
Registriert seit: Aug 2002
Ort: Münster/Germany
Beiträge: 324
SPiC eine Nachricht über ICQ schicken
@Nev: Habe ich das Angebot nicht schon angenommen???

=:-) Sebastian
__________________
Member of the PHP Development Group

spic@php.net
www.php.net
Thema geschlossen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:50:15 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt