kostenloser Webspace werbefrei: lima-city


Geschwindigkeit und optimaler Code

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    phattek

    Kostenloser Webspace von phattek

    phattek hat kostenlosen Webspace.

    Hallo alle zusammen!

    Mich w?rde mal interessieren, was man beachten sollte, wenn man seine Seite trotz dynamischer Inhalte noch schnell erzeugt haben will.
    Kann man pro Seite bedenkenlos 10 MySQL-Selects durchf?hren, oder nimmt das ?berm??ig viel (Server-)Geschwindigkeit?
    Sind 10 kb gro?e G?stbuch Scripts bedenklich?

    Wie viele SQL-Abfragen haben eingentlich PHPKit, PHPBB & Co? Und wie viele Kb PHP-Code werden da so pro Abfrage ausgef?hrt?

    (Sgat mir jetzt bitte nicht, wie ich die Erstellungszeit messen kann. Ich will wissen, wie weit man mit seinen Scripts gehen kann/nicht gehen sollte)
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Nunja, das ist auch von der Servergeschwindigkeit unabh?ngig.

    je schneller der Server, desto mehr Selects sind ausf?rhrbar. Dann leigt es noch an der ?bertragungsrate, die die meisten user verwenden. Dannach soltle man sich auch richten. 10 Selects sind bei einem schnellen Server und geeigneten vebrindungen, die jeder normalb?rger inzwischne hat, unbednklich, w?rde ich sch?tzen.

    Dann liegt es noch an der Art der Selects. Eine Where Clause macht dabei zwar wenig aus, aber es reiht sich ja auch zsuammen ;)


    Hoffe ich konnte dir helfen.

    Greetz Adrians.
  4. Autor dieses Themas

    phattek

    Kostenloser Webspace von phattek

    phattek hat kostenlosen Webspace.

    adrians schrieb:
    Hoffe ich konnte dir helfen.

    Greetz Adrians.

    Naja, ...
    Gibt es denn irgendwelche Faustregeln, die man einhalten sollte (bz?glich gr??e der PHP-Scripts und Umfang und Anzahl der MySQL-Queries), damit die Performance in eiem guten Rahmen bleibt?

    Wenn ich so umfangreiche PHP-Scripte und SQL-Abfragen ausf?hre, dass der Server total ?berlastet wird, sobald mehr als zwei Leute auf meiner Seite sind habe ich ja auch nichts gekonnt.

    *nachtr?glich_einf?g* Ich meine ?brigens nicht die ?bertragung der Daten vom Server zum CLient, sondern die Erstellung dynamischer Seiten auf dem Server.

    Sowas:
    <!-- Erstellungsdauer: 88.083995 Sekunden -->
    will ich z.B. vermeiden; lag aber in dem Fall wirklich am Server.

    Beitrag ge?ndert am 16.01.2006 20:48 von phattek
  5. theuntouchables

    theuntouchables hat kostenlosen Webspace.

    In diesem fall gillt die faustregel "je weniger desto besser".
    Schau mal ob du die MySQL selects nicht zusammenfassen kannst, z.b. wenn du ein select f?r die men?daten hast und mehre men?s hast, mach es nicht f?r jedes men? einzelln, sondern mach einmal am kopf alle zusammen und speichers in variablen (bei mehreren werten in arrays).
    Das gleiche gilt f?r foren und GBs...

    PS: bei einem durchschnitts server sollten es nicht 15 anfragen pro client (und durchschnittlich 60 anfragen pro minute) ?berschreiten, wenn du nicht l?ngere ladezeiten als 1 sec (serverseitg) habem willst.
  6. Autor dieses Themas

    phattek

    Kostenloser Webspace von phattek

    phattek hat kostenlosen Webspace.

    theuntouchables schrieb:
    In diesem fall gillt die faustregel 'je weniger desto besser'.
    Schau mal ob du die MySQL selects nicht zusammenfassen kannst, z.b. wenn du ein select f?r die men?daten hast und mehre men?s hast, mach es nicht f?r jedes men? einzelln, sondern mach einmal am kopf alle zusammen und speichers in variablen (bei mehreren werten in arrays).
    Das gleiche gilt f?r foren und GBs...

    Wie k?nnte ich z.B. die folgenden zwei Queries zusammen fassen:
    $sql_select = "SELECT * FROM `{$dbconfig['pref']}ext_$table` WHERE 1 ORDER BY `time` DESC, `id` DESC LIMIT ".($perpage*(intval($_GET['page'])-1)).",$perpage;";
    $sql_pages = "SELECT count(*) as `sum` FROM `{$dbconfig['pref']}ext_$table`;";
    ?
    Ich nehme mal an, dass ich
    $result = mysql_query($sql_select.$sql_pages);
    schreiben m?sste?
    Wo sind dann in $result die jeweiligen Datens?tze "zu finden"?

    Noch eine Frage: Wie kann ich Tabellen verkn?pfen? Ich will z.B. die News auslesen und nun soll automatisch der Name des Autors an den Datensatz gehangen werden. In der Tabelle f?r die News steht aber nur die Userid des Autors und der Name steht in einer anderen Tabelle.

    Beitrag ge?ndert am 17.01.2006 18:34 von phattek
  7. a**e

    Tabellen kannst du bei einer Ausgabe durch einen Join verkn?pfen.
    $query = mysql_query("SELECT * FROM autor_details,news
    WHERE autor_details.userid = news.userid
    AND autor_details.userid=123 ");


    F?r * musst du allerdings die Spaltennamen einsetzen, wenn zwei Spalten den gleichen Namen haben!
    Diese Anfrage, wie sie oben steht w?rde also nicht funktionieren, da durch * userid aus beiden Tabellen ausgelesen wird.

    mfg
    Arve

    Beitrag ge?ndert am 17.01.2006 21:21 von arve

  8. Hallo alle zusammen!

    Mich w?rde mal interessieren, was man beachten sollte, wenn man seine Seite trotz dynamischer Inhalte noch schnell erzeugt haben will.
    Kann man pro Seite bedenkenlos 10 MySQL-Selects durchf?hren, oder nimmt das ?berm??ig viel (Server-)Geschwindigkeit?
    Sind 10 kb gro?e G?stbuch Scripts bedenklich?

    n?

    Wie viele SQL-Abfragen haben eingentlich PHPKit, PHPBB & Co? Und wie viele Kb PHP-Code werden da so pro Abfrage ausgef?hrt?

    Glaub das willst du garnicht wissen weil PHPkit eigentlich nur auf MySQL bassiert, aber an sowas siehste, dass du einiges abfragen kannst ;D

    (Sgat mir jetzt bitte nicht, wie ich die Erstellungszeit messen kann. Ich will wissen, wie weit man mit seinen Scripts gehen kann/nicht gehen sollte)

    Du kannst das mit nem PHPcode ;) ne scherz :D

    aber ich denke du solltest aus erfahrung lernen,
    aber 10abfragen machen nix! Problematisch wirds dann schon bei so 70...


  9. Hallo alle zusammen!

    Mich w?rde mal interessieren, was man beachten sollte, wenn man seine Seite trotz dynamischer Inhalte noch schnell erzeugt haben will.
    Kann man pro Seite bedenkenlos 10 MySQL-Selects durchf?hren, oder nimmt das ?berm??ig viel (Server-)Geschwindigkeit?
    Sind 10 kb gro?e G?stbuch Scripts bedenklich?

    n?

    Wie viele SQL-Abfragen haben eingentlich PHPKit, PHPBB & Co? Und wie viele Kb PHP-Code werden da so pro Abfrage ausgef?hrt?

    Glaub das willst du garnicht wissen weil PHPkit eigentlich nur auf MySQL bassiert, aber an sowas siehste, dass du einiges abfragen kannst ;D

    (Sgat mir jetzt bitte nicht, wie ich die Erstellungszeit messen kann. Ich will wissen, wie weit man mit seinen Scripts gehen kann/nicht gehen sollte)

    Du kannst das mit nem PHPcode ;) ne scherz :D

    aber ich denke du solltest aus erfahrung lernen,
    aber 10abfragen machen nix! Problematisch wirds dann schon bei so 70...

    10 Abfragen???
    Mal im Ernst, f?r einfache Seiten reichen zwei....
    F?r cyCase habe ich glaube ich 4 MySQL Abfragen.
    Wenn man vern?nftig und Ressourcensparend arbeitet, dann schafft man das auch.



    arve schrieb:
    Tabellen kannst du bei einer Ausgabe durch einen Join verkn?pfen.
    $query = mysql_query('SELECT * FROM autor_details,news
    WHERE autor_details.userid = news.userid
    AND autor_details.userid=123 ');


    F?r * musst du allerdings die Spaltennamen einsetzen, wenn zwei Spalten den gleichen Namen haben!
    Diese Anfrage, wie sie oben steht w?rde also nicht funktionieren, da durch * userid aus beiden Tabellen ausgelesen wird.

    mfg
    Arve

    Beitrag ge?ndert am 17.01.2006 21:21 von arve

    Es w?rde auch mit LEFT OUTER JOIN gehen, wobei deine M?glichkeit einfacher und mir neu ist. Aber man lernt nie aus. :-)

    MfG Lucas
  10. Autor dieses Themas

    phattek

    Kostenloser Webspace von phattek

    phattek hat kostenlosen Webspace.

    lucas9991 schrieb:
    10 Abfragen???
    Mal im Ernst, f?r einfache Seiten reichen zwei....
    F?r cyCase habe ich glaube ich 4 MySQL Abfragen.
    Wenn man vern?nftig und Ressourcensparend arbeitet, dann schafft man das auch.

    ALso ich habe jetzt im einfachsten Fall drei Abfragen: Userdaten, Navigation, Inhalt. Bei G?stebuch, etc. kommen dann nochmal mehrere dazu.

    Mit dem JOIN hab ich jetzt schon selber nachgelesen. Ich machs mit LEFT JOIN ... ON ...:
    SELECT `rights`.*,`cats`.`id` AS `catid`,`cats`.`name` AS `catname`,`users`.`name` AS `username`, `contents`.`order`,`contents`.`format` ,`contents`.`content`
    FROM `{$dbconfig['pref']}rights` AS `rights`
    LEFT JOIN `{$dbconfig['pref']}users` AS `users` ON `rights`.`userid` = `users`.`id`
    LEFT JOIN `{$dbconfig['pref']}contents` AS `contents` ON `rights`.`contentid` = `contents`.`id`
    LEFT JOIN `{$dbconfig['pref']}categories` AS `cats` ON `contents`.`cat` = `cats`.`id`
    ORDER BY `users`.`name`,`cats`.`order`, `contents`.`order`;


    Kann ich irgendwie mehrere einzelne SQL-Queries, die ncihts miteinander zu tun haben auf einmal zum MySQL-Server schicken? Gibt es sowas wie IFs, ...?

    /Edit/ CREATE TABLE IF NOT EXISTS kenne ich. Kann man auch INSERTs an Bedingungen k?pfen?

    Beitrag ge?ndert am 17.01.2006 23:00 von phattek
  11. H?ngt von den Bedingungen ab. Neben der bekannten Form:

    INSERT ... INTO [database-name .] table-name [(column-list)] VALUES(value-list)


    gibt es auch diese Form eines INSERT-Statements:

    INSERT ... INTO [database-name .] table-name [(column-list)] select-statement


    Das "select-statement" kann dabei so aussehen, wie bei einem normalen SELECT.

    Zusammenfassen kann man die SQL-Queries auf zwei Arten:

    1. Du baust einfach mehrere Queries in einen Query-String ein und gibst diese gesammelten Queries dann an den DB-Server zur Verarbeitung.

    2. Es gibt die Anweisung "COMMIT" und einige dazu, die dazu dient, mehrere Queries in einem Rutsch auszuf?hren. Das macht das Ganze nochmal schneller. Zur genaueren Information m?sstest du aber das MySQL-Handbuch konsultieren -- ich wei? nur, dass es sowas gibt. :wink:

    Zum Allgemeinen Thema:

    Hier mal lesen:
    http://www.thegeek.de/blog/type/archiv/post/200412.html

    Auf Datenbankabfragen verzichten, soweit es geht. Denn die sind immer unkalkulierbar auf Shared-Hosting-Systemen, wenn sich mehrere Nutzer einen Datenbankserver teilen.

    Das kannst du machen, indem du einfache Textdateien benutzt (h?ngt nat?rlich von der Datenmenge ab). F?r komplizierte SELECTs aus mehreren Tabellen ist das nat?rlich nichts.

    Du kannst aber auch die Seiteninhalte "cachen". Das ist die ?bliche Vorgehensweise bei gro?en Website-Projekten. Und jedes halbwegs taugliche WebCMS oder Portal-System hat solche Funktionen. Wenn man sich zum Beispiel den Quellcode von WikiMedia anschaut, wird es einem (vorsichtig ausgedr?ckt) ?bel -- dort ist gar nichts optimiert. Die Wikipedia zieht also ihre Geschwindigkeit voll aus dem Cache. Das klappt so lange, wie die Zahl der ?nderungen klein gegen?ber der Zahl der ausgelieferten Seiten bleibt.

    Beitrag ge?ndert am 18.01.2006 12:41 von alopex
  12. Autor dieses Themas

    phattek

    Kostenloser Webspace von phattek

    phattek hat kostenlosen Webspace.

    alopex schrieb:
    Zur genaueren Information m?sstest du aber das MySQL-Handbuch konsultieren -- ich wei? nur, dass es sowas gibt. :wink:

    Ist das "MySQL-Handbuch", von dem immer alle reden eigentlich ein ganz bestimmtes Buch oder meint ihr irgendein Handbuch? (Falls ihr ein bestimmtes meint: Gibts das online?)

    Das mit den Textdateien finde ich eigentlich nicht so toll, weil unflexibel und nur f?r einfache Strukturen (Counter, ...) sinvoll.

    Wei? jemand mehr ?ber die von alopex erw?hnten Methoden?

    /Edit/ Hier (http://www.thegeek.de/blog/type/archiv/post/200412.html) steht, dass man Queries einfach in einen String schreiben kann und dann alle Queries ausf?hren kann. Was mache ich falsch?:
    You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ';DELETE FROM `phattek_rights` WHERE `contentid`='1022';DELETE F


    Beitrag ge?ndert am 18.01.2006 15:16 von phattek
  13. c*********c

    Ist das "MySQL-Handbuch", von dem immer alle reden eigentlich ein ganz bestimmtes Buch oder meint ihr irgendein Handbuch? (Falls ihr ein bestimmtes meint: Gibts das online?)


    Damit d?rfte die MySQL-Dokumentation gemeint sein. Zu finden unter http://dev.mysql.com/doc/


    Das mit den Textdateien finde ich eigentlich nicht so toll, weil unflexibel und nur f?r einfache Strukturen (Counter, ...) sinvoll.


    Schau dir mal bitte folgende Seite an: http://c-worker.ch/ => TEXT DB API
  14. Autor dieses Themas

    phattek

    Kostenloser Webspace von phattek

    phattek hat kostenlosen Webspace.

    arve schrieb:
    $query = mysql_query('SELECT * FROM autor_details,news
    WHERE autor_details.userid = news.userid
    AND autor_details.userid=123 ');

    Das ist ?brigens nicht sinvoll, weil erst beide Tabellen verbunden werden und dann die WHERE-Bedingung ?berpr?ft wird. Wenn beide Tabellen 100 Datens?tze haben, dann muss eine Tempor?re Tabelle mit 10 000 Datens?tzen erstellt werden, auf welcher dann die WHERE-Bedingung gepr?ft wird.

    Besser ist es so wie folgt:
    $query = mysql_query('SELECT Tabelle1.text,Tabelle1.userid,Tabelle2.name
    FROM Tabelle1
    LEFT JOIN Tabelle2 ON Tabelle1.userid=Tabelle2.id');

    So wird einfach immer eine Spalte rangehangen. Die Geschwindigkeit d?rfte also mindestens um den Faktor 100 schneller sein.
  15. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!