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

eyz

Mitglied
Thread Starter
Registriert
29.12.2003
Beiträge
180
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
 

Nogger

Mitglied
Registriert
03.08.2004
Beiträge
372
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()
 

eyz

Mitglied
Thread Starter
Registriert
29.12.2003
Beiträge
180
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($sqlpercent, 2) . '%');
?>
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
 

Alfisto

Mitglied
Registriert
09.06.2004
Beiträge
81
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
 

Alfisto

Mitglied
Registriert
09.06.2004
Beiträge
81
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 bearbeitet von einem Moderator:

eyz

Mitglied
Thread Starter
Registriert
29.12.2003
Beiträge
180
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:
Oben