Michael Keller: Schon wieder die Geschwindigkeit... 2 Mal den gleichen Befehl

Hallo zusammen

schon wieder eine Frage zur MySQL-Geschwindigkeit bei meiner Statistik.

Ich habe den Tipp bekommen meine Abfrage (wieviele verschiedene Einträge gibt es in der Spalte session_id => um die verschiedenen Besucher zu zählen) so zu formulieren:
SELECT count(DISTINCT session_id) FROM $db.$table;

Wenn ich diese Funktion das erste Mal ausführe geht es ca. 12 Sekunden. Bei der zweiten Ausführung dauert es noch knapp EINE Sekunde. Wir da was gecachet?
Da ich diese Statistik ja nicht sehr oft ausführe bringt es mir nicht viel, wenn es erst beim 2. Mal schneller geht.
Gegenüber dem ersten Durchgang ist sogar meine alte Abfragemethode:
SELECT id FROM $db$table GROUP BY session_id;
(und danach mysql_num_rows)
schneller.

Kann ich irgendwie machen, dass ich immer die 2. Gescheindigkeit bekomme?

Gruss Michael

  1. Ich habe den Tipp bekommen meine Abfrage (wieviele verschiedene Einträge gibt es in der Spalte session_id => um die verschiedenen Besucher zu zählen) so zu formulieren:
    SELECT count(DISTINCT session_id) FROM $db.$table;

    Mein Tip. :-)

    Wenn ich diese Funktion das erste Mal ausführe geht es ca. 12 Sekunden. Bei der zweiten Ausführung dauert es noch knapp EINE Sekunde. Wir da was gecachet?

    Jau.

    Kann ich irgendwie machen, dass ich immer die 2. Gescheindigkeit bekomme?

    Du mußt auf das Feld session_id einen INDEX legen. Das sollte man generell mit allen Feldern machen, die entweder in einer WHERE-Klausel oder einer Aggregatfunktion (wie Count()) vorkommen.
    Ohne Indexierung ist eine Datenbank eigentlich auch nicht viel wert. :-)

    1. Mein Tip. :-)

      jep :) war super!

      Du mußt auf das Feld session_id einen INDEX legen. Das sollte man generell mit allen Feldern machen, die entweder in einer WHERE-Klausel oder einer Aggregatfunktion (wie Count()) vorkommen.

      Habe ich gemacht... Doch es gibt natürlich sehr viele verschiedene session_id's.
      Aber wenn das mit dem Cachen so ist, weiss ich jetzt wenigstens, dass ich nicht versuchen muss bei der ersten Abfrage schon die Geschwindigkeit der zweiten zu erreichen.

      Ohne Indexierung ist eine Datenbank eigentlich auch nicht viel wert. :-)

      Das habe ich auch gemerkt... (die Indexierung einer anderen Spalte hat die Statistik um 100% beschleunigt.

      Gruss Michael