Datum?

Könntest du noch einen Benchmark für das auslesen von date + time.. also nicht datetime machen.. datetime verbraucht nämlich 8 byte.. date + time allerdings nur 4 byte soweit ich das noch weiß :)
Könnte u.U. den Nachteil wetmachen.. btw.. hast du mit php formatiert beim auslesen? oder hast du nur die queries gebenchmarked?

Btw.: wie hast du gebenchmarked?
mit AB (Apache Benchmark)?
 
Zuletzt bearbeitet:
Ich hab mich mal darangesetzt, einen Performance-Vergleich anzustellen, und bin auf ein etwas anderes Ergebnis gestoßen.
Überprüft hab ich einmal, wie die Spaltentypen INT, DATETIME und TIMESTAMP(14) bei Datenbankeinträgen und -ausgaben zeitlich verhielten. Ich bin von diesen Typen ausgegangen, da bei vielen Operationen oft ein bestimmter Zeitpunkt relevant ist.

Ich bin z. B. auf folgendes Resultat gekommen:
Code:
INSERT INTO INT:			1.1508231163025
INSET INTO DATETIME:			1.1804440021515
INSERT INTO TIMESTAMP(14):		1.2259771823883

SELECT von INT, formatiert:		0.071377992630005
SELECT von DATETIME, formatiert:	0.029855966567993
SELECT von TIMESTAMP(14), formatiert:	0.066927909851074
Demnach zu urteilen, mag das Einfügen von Werten in eine INT-Spalte schneller sein, jedoch wird das durch die höhere Formatierungszeit wieder kompensiert. Und ich denke doch, dass eine schnell formatierte Ausgabe wichtiger ist, als ein schnelles Einfügen.
 
Oliver Gringel und Gumbo, danke für die (sehr interessanten) Benchmarks! Wollte ähnliches eigentlich selber durchführen, hab aber noch keine Zeit dafür gefunden. Endlich mal sachliche Argumente hier :)
 
Hm hab selbst mal gebencht und ebenfalls festgestellt, dass bei der Ausgabe mysql schneller ist mit DATE_FORMAT!
 
Na eigentlich war er nur für mich intern.

Hab versucht für beide gleiche bedinungen zu schaffen, weshalb ich auch paar mehr Benchaufrufe hab.

Schreibfehler etc. sind mir egal :p
Falls es jemand nachcoden will: die benchklasse findet ihr hier: pear.php.net
Ach und zu den Ergebnissen: Teilweise kamen dann ausrutscher bei wenigen Durchgängen.

PHP:
<?
    require_once('./bench/Timer.php');

    mysql_connect('localhost', 'root', '');
    mysql_select_db('test');
    $timer = new Benchmark_Timer();
    $timer->start();
    echo 'start';
    $timer->setMarker('START');
    /*for($i = 0; $i < 1000; $i++){
        if(!mysql_query('INSERT INTO zeit(id, zeitint, zeitdatumlang, zeitdatumkurz, time)
                         VALUES(
                             \'\',
                             \''.time().'\',
                             \'\',
                             \'\',
                             \'\')')){
            echo mysql_error();
            die('fehler!');
        }
    }
    $timer->setMarker('Intstop');
    $timer->setMarker('Tatetime start');
    for($i = 0; $i < 1000; $i++){
        if(!mysql_query('INSERT INTO zeit(zeitdatumlang) VALUES(NOW())')){
            echo mysql_error();
            die('fehler!');
        }
    }
    $timer->setMarker('Datetime stop');   */


  for($i = 0; $i < 10; $i++){
        if(! $id = mysql_query('SELECT zeitint FROM zeit LIMIT 0,1000')){
            echo mysql_error();
            die('fehler!');
        }
        while($row = mysql_fetch_assoc($id)){
            $zeit = date('d.m.Y', $id['zeitint']);
            //echo $zeit.'  ';
        }
    }
    $timer->setMarker('Intstop');
    echo '<br>';
    $timer->setMarker('Tatetime start');
    for($i = 0; $i < 10; $i++){
        if(! $id = mysql_query('SELECT DATE_FORMAT(zeitdatumlang,\'%d.%m.%Y\') AS zeit FROM zeit LIMIT 1000,1000')){
            echo mysql_error();
            die('fehler!');
        }
        while($row = mysql_fetch_assoc($id)){
            $zeit = $row['zeit'];
           // echo $zeit.'  ';
        }
    }
    $timer->setMarker('Datetime stop');


    $timer->setMarker('STOP');

    echo 'stop';
    $timer->stop();
    $timer->display();
?>
 
Sicaine hat gesagt.:
Öhm ja sicher alles klar...
Wir ignroieren bitte einfach die oben verfügbaren Möglichkeiten mit Mysql ein Datum zu formatieren @ JOhannes röttinger

Genau das meine ich, einfach wild rumflamen, dumme Dinge quatschen, das Maul aufreissen, eine kranke Rechtschreibung an den Tag legen und meinen Namen verballhornen... Ich will ganz offen sein, haettest du gelesen, was ich geschrieben hab, muesstest du dich nicht mit dem Dreck oberhalb ueberall blamieren. Ich schrieb, aussageaehnlich, dass ein Unix-Timestamp fuer wilde Aktionen in PHP besser geeignet, einfach, weil man damit (in PHP) mathematische Dinge tun kann. Zieh mal 60 von einem einfach gefetchten DATETIME ab (in PHP). Mit einem Unix-Timestamp geht das! Ich werde versuchen meine Aussage, noch kuerzer zu fassen, so dass sie verstaendlicher ist (rede ich so ein kompliziertes Zeug? Ich denke doch nicht, oder?): Ein Unix-Timestamp ist unter PHP in 99% aller Faelle praktischer! Ich hab doch kein Wort davon gesagt, dass MySQL nicht in der Lage waere, ein Datum zu formatieren?
Echt, ich raff es nicht, wie dreist man einfach eine Aussage unterstellen kann...
Ich denke, ihr solltet einfach ueber euren Tellerrand gucken, und testen, welche Methode fuer euren Zweck besser geeignet ist, bzw. womit ihr besser klar kommt; mit den PHP- oder den MySQL-Zeitfunktionen (seien sie nun fuer einen UNIX-Timestamp oder ein Date(time)-Feld).
 
und damit in PHP wilde Dinge anstellen will (Wochentag rausfinden, Kalenderwoche, etc. pp.) ist ein Timestamp einfach viel komfortabeler. *kopfschuettel* So schwer ist das doch nicht, oder
Ich bezog mich auf das hier mein lieber Johannes Röttger. Hier ist halt nunmal ein Timestamp als int nicht kompfortabler...

Lies du erstmal deine Beiträge richtig.
Und nein ein Timestamp ist zu 99% nicht kompfortabler. Meistens wird das Datum formatiert ausgegeben was in MySql schneller und einfacher geht und nicht damit gerechnet. Aber das wilst du ja anscheined nicht verstehen.

Edit: (hab jetzt noch bisl zeit :p)
Und nächstes mal lies deine Beiträge mal genauer durch bervor du andere blöd anmachst und rumflamest. Und nur weil ich deinen Namen jetzt nicht fehlerfrei geschrieben habe, brauchst auch nich gleich in die Luft zu gehen...(Wenn ich schnell schreibe, dann soll ich mir deinen Namen merken? Vielleicht am besten noch extra markieren und dann einfügen? Weils ja sooo wichtig is, dass der Nick( oder name) richtig geschrieben ist. Es gibt wichtigeres z.b. seine eigene Beiträge richtig schreiben.

Edit 2: Ich werf jetzt nochmal was in den Raum was anscheined untergegangen ist und wovon ich auch ausgehe:
Dann will ich nochmal ein weiteres Argument in den Raum werfen:
Eine Datenbank soll Daten in strukturierter Form speichern.
Dabei spielt es keine Rolle, mit welcher Programmiersprache oder Anwendungssoftware ich auf diese Daten zugreife
Nur weil ich nen Int auch in nem Varchar speichern kann, tu ichs nicht. Wenn ich einen Wert von 0-255 speichern will, nehm ich auch keinen Int her nur weils geht sondern nen TinyInt und ich nehme auch keinen Text für nen Namen etc. Die Leute ham sich scho was überlegt, warum sie die Datentypen Timestamp und Date und Datetime eingefügt haben. Das zeug existiert ned umsonst. Parallel dazu was glaubst du kapiert jemand schneller? Wenn da jemand Datetime oder Timestamp verwendet oder int? Ich würd und werde weiterhin davon ausgehen, dass jemand Datetime für die Zeit standardmässig benützt.
 
Zuletzt bearbeitet von einem Moderator:
Sicaine hat gesagt.:
Ich bezog mich auf das hier mein lieber Johannes Röttger. Hier ist halt nunmal ein Timestamp als int nicht kompfortabler...
Nein, du liest immernoch nicht richtig... ARGS! Siehst du die beiden Worte "in PHP"? Siehst du sie?


Lies du erstmal deine Beiträge richtig.
Und nein ein Timestamp ist zu 99% nicht kompfortabler. Meistens wird das Datum formatiert ausgegeben was in MySql schneller und einfacher geht und nicht damit gerechnet. Aber das wilst du ja anscheined nicht verstehen.
Darauf kommt es doch garnicht an Ich habe eine Aussage gemacht, und zwar, dass man mit einem Int leichter rechnen kann. Das kannst du nicht damit wiederlegen, dass du nicht mit einem Int rechnen willst! Geht das in deinen Kopf? Ja oder Nein?

Edit: (hab jetzt noch bisl zeit :p)
Und nächstes mal lies deine Beiträge mal genauer durch bervor du andere blöd anmachst und rumflamest. Und nur weil ich deinen Namen jetzt nicht fehlerfrei geschrieben habe, brauchst auch nich gleich in die Luft zu gehen...(Wenn ich schnell schreibe, dann soll ich mir deinen Namen merken? Vielleicht am besten noch extra markieren und dann einfügen? Weils ja sooo wichtig is, dass der Nick( oder name) richtig geschrieben ist. Es gibt wichtigeres z.b. seine eigene Beiträge richtig schreiben.
Tja, wenn ich dich Sick-aine nenne, findest du das sicher auch nicht lustig... Und das ist nur dein Nickname. Es ist ganz einfach, ich lege Wert darauf, dass mein Name richtig geschrieben ist. Wenn dir das nicht passt, dann schreib ihn nicht, ansonsten wunder dich nicht, wenn ich dich anmache!

Nur weil ich nen Int auch in nem Varchar speichern kann, tu ichs nicht. Wenn ich einen Wert von 0-255 speichern will, nehm ich auch keinen Int her nur weils geht sondern nen TinyInt und ich nehme auch keinen Text für nen Namen etc. Die Leute ham sich scho was überlegt, warum sie die Datentypen Timestamp und Date und Datetime eingefügt haben. Das zeug existiert ned umsonst. Parallel dazu was glaubst du kapiert jemand schneller? Wenn da jemand Datetime oder Timestamp verwendet oder int? Ich würd und werde weiterhin davon ausgehen, dass jemand Datetime für die Zeit standardmässig benützt.
Ich glaube kapiert hat hier jeder den Unix-Timestamp... Und ich kann mich nur wiederholen: In MySQL ist es klasse, wenn man mit den Zeitfunktionen rumrechnen kann, sobald man aber in einer anderen Sprache etwas damit rumbasteln will (IN PHP), ist ein Unix-Timestamp um laengen besser... Klar, du kannst auch ein Datetime in der Datenbank speichern und es dann als Timestamp zurueckgeben, was besser ist ist aber immer fallabhaengig. Vor allem, nachdem die Benchmarks gezeigt haben, dass INT schneller ist als Datetime, und damit natuerlich viel schneller als Datetime mit umrechnung zum Unix-Timestamp.
 
Was war die Kernaussage von mir?

Man verwendet keinen Int für einen Timestamp.

Weil man dafür(wenn man schon ne Timestamp speichen will) den Timestamp Typ verwendet. Der in Mysql zusatzfunktionen hat.

Ansonsten war meine 2te Aussage: Dass Datetime wesentlich besser ist als ein Timestamp.

Und nochmal: Da meistens das formatierte Ausgeben eines Zeitpunktes das häufigste Anwendungsgebiet ist, sehe ich Datetime als standard an. Wennman nicht grad ein Script schreibtw as zig datumsberechnungen drinnen hat.
 
Zurück