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

    MacUser seit:
    29.12.2003
    Beiträge:
    176
    Zustimmungen:
    0
    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

    MacUser seit:
    03.08.2004
    Beiträge:
    367
    Zustimmungen:
    0
    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

    MacUser seit:
    29.12.2003
    Beiträge:
    176
    Zustimmungen:
    0
    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

    MacUser seit:
    09.06.2004
    Beiträge:
    79
    Zustimmungen:
    0
    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

    MacUser seit:
    09.06.2004
    Beiträge:
    79
    Zustimmungen:
    0
    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

    MacUser seit:
    29.12.2003
    Beiträge:
    176
    Zustimmungen:
    0
    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