Blätter funktion erweitern

Ich habe es schon erlebt, dass Leute das SELECT * FROM am Anfang drin hatten, und dann Code dazu geschrieben haben zum Darstellen der Daten.
Nachdem alles mehr oder weniger fertig war, waren sie mit der Performance unzufrieden, und fingen an am Code/Algorithmus rumzuschrauben einschliesslich Anfragen in diversen Foren.

Und in fast jedem Fall kam mehr oder weniger immer der Rat, aus dem SELECT * ein "echtes" SELECT zu machen
Fazit: Kaum hatten die Leute aus dem SELECT * FROM ein "echtes" SELECT Dies, Das, Jenes FROM gemacht, sprang die Performance hoch um mehrere Faktoren.
 
OK, gute Diskussion hätte order by datum noch rausnehmen sollen und statt * id schreiben sollen aber versteht das jeder user wirklich?
 
OK, gute Diskussion hätte order by datum noch rausnehmen sollen und statt * id schreiben sollen aber versteht das jeder user wirklich?
Wieso muss ein User deinen Quellcode verstehen??

Und wenn dein SELECT * FROM da oben eigentlich nur ID braucht, dann ist es sogar reine Mathematik:
ID ist wahrscheinlich ein Integer (Primary Key?) --> 4 Bytes
Nehmen wir an, in der Tabelle sind 10 weitere Spalten (zusätzlich zu ID):
Ein Datum --> 8 Bytes
Sechsmal VARCHAR --> Im Schnitt jeweils 100 Zeichen --> 1200 Bytes (oder sogar mehr falls utf8mb)
(hier gehe ich von 2 Bytes pro Zeichen aus)
dreimal INTEGER --> 12 Bytes
--> 1224 Bytes pro Record
Und jetzt holst du mal 10K Sätze aus der DB ab --> 12.240.000 bytes --> ca. 12 MB die durch die Leitung wollen.
jetzt vergleiche das mal mit SELECT id FROM Tabelle mit 10K Sätzen
--> 40.000 Bytes --> ca. 40KB die durch die Leitung wollen

Und jetzt erwähne ich nicht mal, dass 1000 User gleichzeitig da drauf gehen.....
 
Also ich verstehe genau was Du meinst,
wenn ich aber alle Einträge aus dieser DB brauche warum dann zum Testen kein *?

das eigentliche select sieht jetzt wo es funktioniert so aus:
PHP:
$stmt = $mysqli->prepare('select id,name,mail,datum,text from tabelle order by datum desc limit $start,$basic[seite]');
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($gbid,$gbname,$gbmail,$gbdatum,$gbtext);
while ($stmt->fetch()) {
echo $gbid;
echo $gbname;
...
}
Wenn ich jetzt bei select ein * schreibe hagelt es Fehlermeldungen.
 
Zuletzt bearbeitet:
Also ich verstehe genau was Du meinst,
wenn ich aber alle Einträge aus dieser DB brauche warum dann zum Testen kein *?

das eigentliche select sieht jetzt wo es funktioniert so aus:
PHP:
$stmt = $mysqli->prepare('select id,name,mail,datum,text from tabelle order by datum desk');
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($gbid,$gbname,$gbmail,$gbdatum,$gbtext);
while ($stmt->fetch()) {
echo $gbid;
echo $gbname;
...
}
Wenn ich jetzt bei select ein * schreibe hagelt es Fehlermeldungen.
Wie scatello schreibt: Desk ist ein Schreibtisch :)
Zu deiner Frage: Weil du jetzt genau siehst, was du abholst, auch wenn es alle Spalten sind.
Du magst vielleicht eine einfache DB mit ein paar wenigen Tabellen haben, aber in der Firma wo ich arbeite, haben wir ca. 5000 (fünf tausend!) Tabellen.
Ausserdem: Mit einem "echten" SELECT kannst du die Reihenfolge der Spalten bestimmen.
Desweiteren glaube ich mich daran zu erinnern, dass der Query-Optimizer dann besser zugreifen kann
 
Wenn ich jetzt bei select ein * schreibe hagelt es Fehlermeldungen.
ist natürlich falsch!
Wenn ich bei select ein * habe und bei
$stmt->bind_result nicht alle Einträge brauche/benutze dann gibt es Fehlermeldung:
PHP:
Fatal error: Uncaught ArgumentCountError: Number of bind variables doesn't match number
of fields in prepared statement in ......php:316 Stack trace: #0 ......php(316):
mysqli_stmt->bind_result(NULL, NULL, NULL, NULL, NULL, NULL) #1
.....andere.php(35): require('C:\\xampp\\htdocs...') #2
{main} thrown in ......php on line 316
 
Dir ist klar, dass dein SELECT 5 Spalten hat, dein bind_result-Fehler 6?
ausserdem sehe ich nirgends, dass du was für die zwei Limit-Parameter übergibst
 
@Zvoni Du schriebst:
Kaum hatten die Leute aus dem SELECT * FROM ein "echtes" SELECT Dies, Das, Jenes FROM gemacht, sprang die Performance hoch um mehrere Faktoren.
und
in der Firma wo ich arbeite, haben wir ca. 5000 (fünf tausend!) Tabellen.
Dann hast Du sicher auch Messergebnisse in der Schublade, aus denen hervorgeht, in welchem Umfang das Angeben der Spalten gegenüber SELECT * die Performance verbessert?
 
Zurück