SQL/left oder php/explode,split schneller? (wordlimit)

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von eyz, 21.01.2005.

  1. eyz

    eyz Thread Starter MacUser Mitglied

    Beiträge:
    176
    Zustimmungen:
    0
    MacUser seit:
    29.12.2003
    hallo leute

    Ich will einen Text aus einer Datenbank auslesen und diesen ausgeben, aber nur die ersten 20 Zeichen.

    Jetzt frag ich mich ob es besser ist, dieses gleich im Query mit "select left(text,20).." oder doch mit einer in php geschriebenen Funktion, den ganzen Text mittels explode() oder split() ..etc, zu splitten und so die ersten 20 Zeichen auszugeben? Von Zeit und Rechenleistung her gesehen.

    ..ja ich weiß, die Frage ist ein "kleinwenig kleinlich" :)

    nichts desto trotz, würde ich mich freuen wenn Ihr mir ein paar Antworten zuwerft :D

    mfg eyz
     
  2. Nogger

    Nogger MacUser Mitglied

    Beiträge:
    367
    Zustimmungen:
    0
    MacUser seit:
    03.08.2004
    Mach einen Benchmark :)

    Ich würde auf die Mysql Version als schnellere Variante tippen. Wenn das Erstellen der Projektion brauchbar implementiert ist. Und davon gehe ich mal aus.

    Nebenbei: In php nimmst du substr()
     
  3. eyz

    eyz Thread Starter MacUser Mitglied

    Beiträge:
    176
    Zustimmungen:
    0
    MacUser seit:
    29.12.2003
    aaarrrgh ich bring den Benchmark nicht zum laufen :////

    also.. ich will die Funktion microtime() benutzen (im manual seht, dass das System den Aufruf von gettimeofday() unterstützen muss..)

    so prüfe ich gettimeofday() ? -->
    PHP:
    <html><head><title></title></head><body>
    <?php
    print_r
    (gettimeofday());
    ?>
    </body></html>
    Ausgabe:
    Array ( [sec] => 1106379790 [usec] => 792058 [minuteswest] => -60 [dsttime] => 0 )

    nun will ich die Zeit messen, und mysql in % ausgeben lassen (Quelle: webclass.ru) -->
    PHP:
    <?
    //startzeit
    $mtime microtime();
    $mtime explode(" ",$mtime);
    $mtime $mtime[1] + $mtime[0];
    $tstart $mtime;

    include 
    'connect.php';

    $result=0;
    $qnum=0;
        
    function 
    do_query($query)
    {
        global 
    $result;
        global 
    $qnum;
    //anzahl der querys
        
    $qnum++;
    //startzeitpunkt des querys bestimmen (in microsec)
        
    $mtime microtime(); 
        
    $mtime explode(" ",$mtime); 
        
    $mtime $mtime[1] + $mtime[0]; 
        
    $tstart $mtime
    //query ausfuehren
        
    $result MYSQL_QUERY($query);
    //endzeitpunkt des querys bestimmen (in microsec)
        
    $mtime microtime(); 
        
    $mtime explode(" ",$mtime); 
        
    $mtime $mtime[1] + $mtime[0]; 
        
    $tend $mtime
        
    $tpassed = ($tend $tstart); 
    //return time of execution
        
    return($tpassed);
    }

    //blabla site und querys
        
    $sql_time+=do_query("SELECT * FROM SOME_TABLE");

    //endzeit
        
    $mtime microtime(); 
        
    $mtime explode(" ",$mtime); 
        
    $mtime $mtime[1] + $mtime[0]; 
        
    $tend $mtime
        
    $total = ($tend $tstart); 

    //Output times:
        
    printf("SQL queries: $qnum, mysql time: %f, total: %f seconds !"$sql_time$total);

    //Calculate and output SQL percents:
        
    $sqlpercent = ($sql_time*100)/$total; print('SQL percents: 'round($sqlpercent2) . '%');
    ?> 
    Ausgabe:
    ... (Quelltext = 0)

    über die test.php in meinem webverzeichnis, sehe ich, dass php5.0.3 installliert ist (jedoch mit "php -v" in der console bekomme ich die antwort PHP 4.3.2.. ?!.. "httpd -v" ergibt Apache/1.3.29)

    kann mir vielleicht wer helfen?

    mfg eyz
     
  4. Alfisto

    Alfisto MacUser Mitglied

    Beiträge:
    79
    Zustimmungen:
    0
    MacUser seit:
    09.06.2004
    MySQL ist flotter. Ich würde in PHP nur Visualisierung machen. Für Datenformatierung und so würde ich SQL benutzen.. mit dem richtigen Querie hast du die Datensätze im passenden format und du kannst dich direkt um die Ausgabe kümmern.

    Greetz
    Alfisto
     
  5. Alfisto

    Alfisto MacUser Mitglied

    Beiträge:
    79
    Zustimmungen:
    0
    MacUser seit:
    09.06.2004
    Nach einer etwas längere Session läuft das Skript nun endlich auch bei mir.

    Nach ein paar merkwürdigen Parse Error durch unsichtbare Zeichen die sich beim Pasten eingeschlichen haben hat alles prima funktioniert. Ich war auch mal so frei substr() gegen LEFT zu testen.
    PHP substr() braucht:0.0018830299377441
    MySQL LEFT braucht: 0.000754

    Wobei die Ergebnisse mit jedem Refresh schwanken. Aber in 90% der Fälle ist MySQL schneller.. wenn auch nicht immer so deutlich.

    Kannst ja selber mal checken:
    http://www.planet-mimo.de/tmp/benchtest.php

    Greetz
    Alfisto
     
    Zuletzt von einem Moderator bearbeitet: 25.10.2015
  6. eyz

    eyz Thread Starter MacUser Mitglied

    Beiträge:
    176
    Zustimmungen:
    0
    MacUser seit:
    29.12.2003
    danke fürs testen :)

    -------edit-----
    jetzt läufts auch bei mir *freu*, nach nochmaligem schreiben hat es schlussendlich geklappt.. keine ahnung was gehabt hat :rolleyes:
     
    Zuletzt bearbeitet: 23.01.2005
Die Seite wird geladen...

Diese Seite empfehlen