2017-04-13 3 views
0

die High Performance MySQL sagt, dass eine der Vorteile des Index ist "Indizes drehen zufällige I/O in sequentielle I/O", so verstehe ich nicht, wie es geht mysql-Indizes verwandeln zufällige I/O in sequentielle I/O.Wie mysql Indizes zufällige I/O in sequentielle I/O

+0

Was ist "High Performance MySQL"? Ein Buch? Blog? Richtiges Zitat bitte. – EJP

+0

ein Buch, geschrieben von Baron Schwartz, Peter Zaitsev, Vadim Tkachenko, siehe den Link, http://shop.oreilly.com/product/0636920022343.do – wxweven

+0

Welche der 3 Editionen ist das? –

Antwort

0

Ich denke, sie bedeuten, dass, wenn Sie solche Indizes Spalte in der Tabelle haben Sie Ihre Sachen sehr einfach sortieren können als die Indizes eine Sequenz

+1

Von diesen Eigenschaften gehen die folgenden drei Hauptvorteile aus: Eigenschaften: 1. Indizes reduzieren die Datenmenge, die der Server untersuchen muss. 2. Indizes helfen dem Server, Sortier- und temporäre Tabellen zu vermeiden. 3. Indizes verwandeln zufällige I/O in sequentielle I/O ... So wurde die Sortierung Vorteil vorgeschlagen, aber immer noch gibt es eine "Indizes, die zufällige I/O in sequentielle I/O" nutzen, ich wirklich tun verstehe nicht wie. Trotzdem danke! – wxweven

0

Denken eines Telefonbuchs sind. Angenommen, Sie möchten Personen mit Nachnamen suchen, die mit "S" beginnen. Sie können alle sehr nahe beieinander finden.

Sortierung wird auch durch einen Index unterstützt. Wenn Sie nach allen Personen mit Nachnamen suchen, die mit "S" beginnen, und Sie diese in der Reihenfolge ihres Nachnamens haben möchten, ist das kein Problem. Die Abfrage kann sie in der Reihenfolge lesen, in der sie im Telefonbuch aufgeführt sind alles zusammen gespeichert. Das Abrufen erfolgt also durch sequentielles Lesen.

Aber wenn Sie möchten, dass sie nach etwas anderem sortiert werden, wie ihr Vorname, dann müssen Sie die abgerufenen Zeilen sortieren, bevor Sie sie in der von Ihnen gewünschten Reihenfolge zurückgeben. Das Dataset, das sortiert werden soll, ist möglicherweise größer als es in den Speicher passt. Daher muss für die Sortierung temporärer Speicherplatz verwendet werden. Es gibt Möglichkeiten, dies ziemlich effizient zu tun, aber es könnte mehrere Durchläufe erfordern oder eine sortierte Liste erstellen, wenn die Zeilen aus der Datenbank abgerufen werden.

Wenn die Zeilen in vorsortierter Reihenfolge gespeichert werden, ist es effizient, nach gemeinsam gespeicherten Werten zu suchen und diese effizient in der Reihenfolge des Index abzurufen.

+0

"Indizes verwandeln zufällige I/O in sequentielle I/O", bedeutet dies, dass dies nur für Primärschlüssel funktioniert? Da Sie die Daten nicht in zwei Indexreihenfolgen speichern können, müssen Sie beim Abrufen von Daten durch andere Indizes immer noch auf zufällige E/A zugreifen. Hoffe auf deine Antwort! Danke vielmals! – wxweven

+0

Dem stimme ich zu. Es sei denn, Ihre Abfrage ist eine "Nur-Index" -Abfrage, bei der nur die Spalten benötigt werden, die Teil des zu überprüfenden Index sind. –