Nudge am 23.01.2009

MySQL Performance Quiz

in MySQL, Witziges | Tags: Index, MySQL, Performance, phpmyadmin

Also Leute, ich habe gerade über folgende Frage nachgedacht:

Ist MySQL schneller, wenn der Index lückenlos ist?

Anderherum gefragt: Ist es langsamger, Abfragen über eine zB mit 1 Million Datensätzen gefüllten Tabelle zu machen, wenn der Index durch viele Löschoperationen “fragmentiert” ist und man ausschließlich den Index für die Suchanfrage benutzt?

Ich werde diese Frage in den nächsten Tagen mal untersuchen. Bis dahin seid ihr aufgefordert, eure Tipps aus dem Bauch heraus abzugeben, gern auch mit ausschmückenden Erläuterungen. 🙂 Natürlich ist es wegen Fairness striktestestestens verboten, das Ergebnis vor der Abgabe eines Tipps zu recherchieren!

Also, ich halte die Voraussetzungen noch einmal fest:

  • Beide Tabellen sind gleich aufgebaut.
  • Beide Tabellen haben die gleiche Anzahl an Einträgen.
  • Beide Tabellen benutzen als Schlüssel  id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT.
  • Beide Tabellen werden vor dem Test über phpmyadmin optimiert.
  • Es werden nur Anfragen auf den Index verwendet.

Aber:

  • Bei einer der Tabellen sind durch vorige Löschoperationen “Lücken” im Index.
  • In der anderen sind die Indizes durchgängig nummeriert.

Ich freu mich schon auf das Ergebnis! 🙂


Das mark ich mir: Alltagz Mr Wong Yigg Del.icio.us Yahoo MyWeb Blinklist Google folkd
 

2 responses to “MySQL Performance Quiz”

  1. Nudge says:

    So, heute mein Tipp (wenn es schon gestern nicht mit dem Lotto klappte):

    Es ist gleich schnell. Und zwar denke ich ist es so:

    MySQL versteht, dass der Query nur den Index benutzt und kann also den
    Index in die Pages kopieren, gerade so viel wie reinpasst. Nun wird also
    geschaut, ob der gewünschte Eintrag im Index ist – wohl per Quicksort-ähnlichem
    Algorithmus, wo die Laufzeit nicht-linear (log n) wächst. Es ist also fast unbedeutend,
    wieviele Index-Werte in einer Page sind, weil pro Schritt logarithmisch mehr Werte
    abgefragt werden können. Lücken im Index bedeuten allerdings auch, dass
    eine Page einen größeren Wertebereich abdeckt.
    Je nachdem, wieviele Index-Pages gebraucht werden, kann also die lineare Variante
    auch langsamer sein.

    Das ist mein Tipp – kann aber auch voll daneben liegen. 🙂

  2. Jens says:

    Hallo,

    ganz klar der ohne Lücken weil wenn man sagt gib mir ab id 15
    dann muss Mysql nämlich nicht beim ersten genau 15 Zeilen
    weglassen. Beim zweiten muss er rechnen wieviele draussen sind.

    cu, Jens

Leave a Reply

Your email address will not be published. Required fields are marked *