php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2005-2

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 22.07.2005, 00:04  
Erfahrener Benutzer
 
Registriert seit: 15.07.2005
Beiträge: 230
zapate
Standard wie viel queries pro seite

ich code gerad ein cms und würde gern wissen wie viel queries pro seite denn noch performant sind. Also ich will das das Script bei 5000-10000 Besuchern pro Tag noch nicht seinen Geist aufgibt.

Da ich ein Kategoriesystem mit unendlich Subkategorien habe, hab ich pro Seitenaufruf knapp 15-20 Queries, einmal für die Navi und einmal der ganze Weg rückwärts für die Headline.

Ist das zu viel? Ich habe eine Verarbeitungszeit von 0.01 bis 0.03 sekunden und in den entscheidenden Queries werden immer blos 2 mal int(11) und einmal varchar(80) angefordert, doch das halt ziemlich oft
zapate ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 22.07.2005, 00:11  
Gast
 
Beiträge: n/a
Standard

Sagen wir so:
Ob es zuviel Leistung zieht haengt davon ab was es macht.
Wenn es ein Newsboard und ein Menue ist, dann sind das ziemlich viele.
Aber wenn rundrum noch alles moegliche sitzt, dann ist das ganz passabel (find ich zumindest).

Wenn du natuerlich die Tabellen reduzieren koenntest, dann waere es besser.
Halt immer an die optimale Struktur ranarbeiten, dann biste auch immer am Minimum der Queries und somit ist auch das Verhaeltnis Performance / Moeglichkeiten am besten.

Aber schreib jetzt nicht alles in eine Tabelle und arbeite dann mit jedem Datensatz tausend Berechnungen durch, weil du ewig die Strings zerlegen musst, damit du das gleiche hast als ob du das mit 3 Tabellen geloest haettest.

Nur wenn du halt wegen einem Feld, das mit anderen vielleicht auch noch in Verbindung steht extra ein neues Query anfaengst, dann ist da noch die Moeglichkeit einer Verbesserung gegeben.

Muesstest dir vielleicht auch mal JOINs angucken.
Da koennteste auch bei zusammenhaengenden Queries ein paar Stueck einsparen
(Kenn ich selbst nur vom Lesen bisher, hab immo noch keine Zeit gehabt das in einem Testprojekt [ausfuehrlich] zu testen, leider)

Gruss
 
Alt 22.07.2005, 00:47  
Erfahrener Benutzer
 
Registriert seit: 15.07.2005
Beiträge: 230
zapate
Standard

ich hab das ganze mit einer einzigen tabelle gelöst. zur zeit sehen die beiden funktionen, gekürzt, wie folgt aus:


PHP-Code:
<?    function navi5($test=null){
        global 
$mysql_base,$mysql_link,$mtable,$iii,$catend,$cont;
        
$ii=0;
        if(isset(
$test)){}
        else {
$test['ID']=0;}
        
$result2=query("SELECT ID, sort, shortname from ".$mtable['artikel']." WHERE `subid`=".$test['ID']." ORDER BY `sort`");
        
$rows=mysql_num_rows($result2);
        if(
$rows==&& !isset($test)){return $catend;}
        while(
$subcat2 mysql_fetch_assoc($result2)){
        
$catend.= $subcat2['shortname'];
        
$iii.="»";
        
$ii++;
        
navi5($subcat2);
        
$iii=ereg_replace(".$","",$iii);
        }
        return 
$catend;

    }
    
    
    function 
navi7($test=null){
        global 
$mysql_base,$mysql_link,$mtable,$iii,$cont,$catend2,$template,$p_index,$_GET;
        if(isset(
$test)){}
        else {
$test['subid']=$_GET['id'];}
        
$result2=query("SELECT ID, sort, shortname,subid from ".$mtable['artikel']." WHERE `ID`=".$test['subid']);
        
$rows=mysql_num_rows($result2);
        while(
$subcat2 mysql_fetch_assoc($result2)){

            if(isset(
$catend2)){ $catend2=$subcat2['shortname'].$catend2;}
            else {
$catend2=$subcat2['shortname'];}
            
navi7($subcat2);
        }

        if(isset(
$gethead) OR isset($getfoot) ){
        return 
$catend2;}
        else {
        return 
$catend2;}

    }
?>
Klar ist sicher nicht die datenbankoptimierteste Sache aber ich würde die Tabellenstruktur gerne beibehalten. Kann man sonst irgendwas machen speziell mit diesen Funktionen vielleicht?

Achja, das ganze ist einmal "vorwärts" sprich die Navigation (Code#1) und einmal "rückwärts" sprich die Headline (Code#2)



edit: Ja rumdrum hängt noch ein Modulsystem, aber je mehr Kategorien, desto mehr Queries. Bei der 3. Subkategorie mit 4 eigenen Subkategorien welche als Modul fungiert können das schon mal 30 Queries werden, je nach Modul
zapate ist offline  
Alt 22.07.2005, 08:11  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

hi, deine lösung ist furchtbar.

http://pear.php.net/DB_NestedSet

nach nested sets im allgemeinen auch noch umschauen - es geht darum, baumstrukturen mit einer einzigen datenbank-abfrage ermitteln zu können.

und lerne schnell, auf globals zu verzichten.

lerne auch, dass die superglobalen nicht erst global verfügbar gemacht werden müssen - sie sind es eh schon.
axo ist offline  
Alt 22.07.2005, 12:02  
Erfahrener Benutzer
 
Registriert seit: 15.07.2005
Beiträge: 230
zapate
Standard

ich kann nicht auf nested umsteigen da ich ein temlplatesystem und ein adminpanel habe das einwandfrei funktioniert. Ausserdem ist dies ein kommerzielles Produkt und ich benutzt da lieber selbstgecodetes.

btw kann ich im oberen beispiel nicht auf globals verzichten die funktionen rufen sich selbst auf, die würden sonst alles vergessen.



aber über tipps wie ich das ganze mit einer datenbankabfrage lösen kann wäre ich überglücklich.
zapate ist offline  
Alt 22.07.2005, 12:21  
Erfahrener Benutzer
 
Registriert seit: 29.10.2004
Beiträge: 1.781
derHund
Standard

du kannst dir den zugriff auf deine nested sets auch selbst coden, brauchst nicht die pear benutzen. hat nix mit dem tpl oder dem acp zutun.
auf den global-mist kannst du sehr wohl verzichten ...

aber mach erstmal dein kommerzielles projekt fertig
__________________
derHund ist offline  
Alt 22.07.2005, 12:36  
Erfahrener Benutzer
 
Registriert seit: 15.07.2005
Beiträge: 230
zapate
Standard

wie kann ich auf die globals verzichten?


die funktion macht doch alles alleine. Muss ich erst irgendwelche Prüfsummen in die Tabelle packen?

Es würde mir schon reichen das ganze über einen Join zu lösen und auf die globals zu verzichten. Ich denke das würde der Performance schon gut genug tun. An Der Tabellenstruktur will ich wie gesagt ungern etwas ändern
zapate ist offline  
Alt 22.07.2005, 13:02  
Erfahrener Benutzer
 
Registriert seit: 20.01.2005
Beiträge: 1.557
PHP-Kenntnisse:
Fortgeschritten
Buhmann ist zur Zeit noch ein unbeschriebenes Blatt
Buhmann eine Nachricht über ICQ schicken Buhmann eine Nachricht über MSN schicken
Standard

warum übergibst du die variablen, die du im mom. global lädst, nicht einfach per parameter?
Buhmann ist offline  
Alt 22.07.2005, 15:54  
Gast
 
Beiträge: n/a
Standard

PHP-Code:
<?php
      
if(isset($test)){} 
      else {
$test['ID']=0;} 
?>
kann man auch kürzer schreiben
PHP-Code:
<?php
      
if(!isset($test)){$test['ID']=0;} } 
?>
MFG Julied
 
Alt 22.07.2005, 15:59  
Waq
Erfahrener Benutzer
 
Registriert seit: 15.08.2004
Beiträge: 2.473
Waq
Standard Re: wie viel queries pro seite

Zitat:
Zitat von zapate
wie viel queries pro seite denn noch performant sind.
So viele wie nötig, so wenig wie möglich. Nein, eine genauere Antwort gibt es nicht.
Es hängt auch stark davon ab, wie gut die einzelnen Queries optimiert sind.

Wenn Du noch nicht weisst, was ein Index ist und wie man EXPLAIN benutzt, solltest Du Dir ganz schnell ein wenig Wissen über MySQL-Optimierung aneignen, das MySQL-Manual hat da z.B. einen Abschnitt.
__________________
mod = master of disaster
Waq ist offline  
 


Themen-Optionen
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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
CURL in Seite einloggen und einen Teil parsen Matt PHP Tipps 2008 8 03.09.2009 22:30
Krieg kein Objekt zurück auf includeter Seite NONNNNN PHP Tipps 2008 5 28.03.2008 19:25
Eintrag in DB und Wechsel zu anderer Seite Darson PHP Tipps 2008 25 14.01.2008 16:46
Seite nicht mehr gültig Igäl PHP Tipps 2006 3 25.05.2006 16:08
[Erledigt] Wetten automatisch von anderer Seite beziehen PHP Tipps 2006 11 03.03.2006 09:09
Formular - Daten für nächste Seite behalten NetLook PHP Tipps 2007 7 18.11.2005 13:21
Frame schließen und wie viel queries pro seite workaholic HTML, Usability und Barrierefreiheit 2 06.09.2005 13:36
Mit post an weitere Seite oder 2 Seiten übergeben? PHP Tipps 2005 1 02.02.2005 12:16
Neue Seite an einer bestimmten Stelle aufrufen PHP Tipps 2005 3 13.01.2005 10:09
blätterfunktion-limit-letzte seite PHP Tipps 2004-2 2 20.12.2004 23:56
Eine 2te Seite auto matisch in neuem Fenster laden PHP Tipps 2004 4 25.08.2004 14:10
[Erledigt] Tabelle auf einer Seite auslesen und in meiner Seite wiederg PHP Tipps 2004 2 14.07.2004 08:46
"NEWS-SCRIPT" in eine Seite einbinden: Aber wie ? PHP Tipps 2004 2 03.07.2004 16:33

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
queries pro seite, wieviel querys pro seite, php wievie query

Alle Zeitangaben in WEZ +2. Es ist jetzt 05:30 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.