power-box.de
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten
Alt 14.04.2006, 00:55   #1
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
Smile

Optimierungstipp MySQL


Wer mit Limit arbeitet, ev. noch Pagebrowser arbeitet, braucht oft die Gesamtzahl der Ergebnisse.
Ein häufiger Weg ist es, erst die Anfrage ohne Limit zu starten, die Anzahl zu speichern und dann die Anfrage mit Limit zu nehmen für die Ausgabe.

Es gibt noch einen effizienteren Weg, den ich genial finde:

SQL_CALC_FOUND_ROWS

http://www.phpbuilder.com/annotate/m...hp3?id=1009619
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline   Mit Zitat antworten


Alt 14.04.2006, 10:15   #2
TP-Supporter
 
Registriert seit: Dec 2005
[jacky] ist auf einem guten Weg
Hi,
danke für den coolen Tipp
Hast Du damit schon Erfahrungen gemacht bzw Benchmarks oder ähnliches?

Wie ist das denn, wenn ich die Queries un unterschiedlichen Funktionen habe? Beispielsweise habe ich eine Funktion, die mir die aktuelle Einträge ausliest und eine andere, die mir die gesamte Anzahl ausliest und daraus den Seiten-Blätter-Code zusammenstellt!

Müsste ja aber eigentlich trotzdem funktionieren, oder?

Edit: Was ich nicht so recht verstehe! Das ganze ist ja schon sehr alt. Warum wird das nicht in allen Foren / Tutorials / Büchern empfohlen? Irgendwie muss das Teil doch Nachteile haben

Geändert von [jacky] (14.04.2006 um 10:17 Uhr).
[jacky] ist offline   Mit Zitat antworten
Alt 14.04.2006, 10:47   #3
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
Die Nachteile - es klappt erst ab einer Version von MySQL ...
Warum es selten empfohlen wird ? Wahrscheinlich weil es gar nicht viele kennen und weil es MySQL-spezifisch ist.

Wo man das einsetzt ist völlig egal, einfach als ersten Parameter mit angeben. Natürlich macht es erst Sinn mit einer LIMIT-Abfrage.
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline   Mit Zitat antworten
Alt 14.04.2006, 10:58   #4
TP-Supporter
 
Registriert seit: Dec 2005
[jacky] ist auf einem guten Weg
ja, das mit Limit ist klar! Ab welcher MySQL Funktion ist dies denn implementiert? Auf MySQL 4 sollte das schon laufen, oder?
[jacky] ist offline   Mit Zitat antworten
Alt 14.04.2006, 11:04   #5
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
soweit ich weiss, funktioniert es ab Version 3.23, aber ab Version 4.1 ist wohl ein Bug damit behoben, damit auch die korrekte Anzahl geliefert wird. ich kann aber nicht genau sagen, in welcher Konstellation der Bug griff.
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline   Mit Zitat antworten
Alt 14.04.2006, 11:15   #6
TP-Member
 
Registriert seit: Apr 2005
Ort: Oberbayern
flo.s macht alles soweit korrekt
Hi,

super Tipp - danke Dir! :-)

Flo
flo.s ist offline   Mit Zitat antworten
Alt 14.04.2006, 13:22   #7
TP-Supporter
 
Registriert seit: Dec 2005
[jacky] ist auf einem guten Weg
So, habe noch ein wenig bei Google gesucht, und bin auf das php Manual gestoßen:

Code:
I find that mysql_num_rows() overlook LIMIT clauses.
For instance:

//table has 700 rows
$command = "SELECT * FROM table LIMIT 500";
$q = mysql_query($command);
$rows = mysql_num_rows($q);

//$rows is 700
( http://php3.de/mysql-num-rows 5.Kommentar von oben)

Ist das dann nicht die selbe Funktion?
[jacky] ist offline   Mit Zitat antworten
Alt 14.04.2006, 14:03   #8
TP-Member
 
Registriert seit: Apr 2005
Ort: Oberbayern
flo.s macht alles soweit korrekt
nein - ist nicht dieselbe Funktion:
http://forum.de.selfhtml.org/archiv/2005/2/t101140/

Grüße,
Flo
flo.s ist offline   Mit Zitat antworten
Alt 14.04.2006, 14:09   #9
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
Flo hat Recht
PHP-Code:
//table has 700 rows
$command "SELECT * FROM table LIMIT 500";
$q mysql_query($command);
$rows mysql_num_rows($q);
//$rows liefert 500

$command "SELECT SQL_CALC_FOUND_ROWS * FROM table LIMIT 500";
$q mysql_query($command);
$rows mysql_num_rows($q);
//$rows liefert 500
$q=mysql_query("Select FOUND_ROWS()");
$row=mysql_fetch_row($q);
//$row[0] liefert 700 
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline   Mit Zitat antworten
Alt 14.04.2006, 14:28   #10
TP-Supporter
 
Registriert seit: Dec 2005
[jacky] ist auf einem guten Weg
ok stimmt
[jacky] ist offline   Mit Zitat antworten
Alt 14.04.2006, 23:32   #11
TP-Supporter
 
Registriert seit: Dec 2005
[jacky] ist auf einem guten Weg
hatte es eben mal bei nem einfachen query aus einer tabelle genutzt, hat geklappt als ich das dann aber bei einem query mit 2 left joins + paar wheres genutzt habe, gings nicht mehr
[jacky] ist offline   Mit Zitat antworten
Alt 15.04.2006, 13:20   #12
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
kann ich nicht bestätigen - ich setze es auch mit joins und wheres ein und das Ergebnis stimmt.
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline   Mit Zitat antworten
Antwort

  Aktuelles Thema
  TP Hilfe Forum > Web-Editoren & Coding > Traum-Dynamik
Optimierungstipp MySQL Optimierungstipp MySQL
« MySQL Workbench | [MySQL] Exkurs Zeichenkettenfunktionen »

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

Erweiterte Suche
Thema bewerten
Thema bewerten:

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

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:48 Uhr.

Powered by: vBulletin Version 3.7 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd. / Search Engine Friendly URLs by vBSEO 3.2.0 ©2008, Crawlability, Inc.
Traum-Projekt.com | Suchen | Archiv | Impressum | Kontakt | | | Nach oben |



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67