PythonQ 240-8XX Manual de usuario Pagina 371

  • Descarga
  • Añadir a mis manuales
  • Imprimir
  • Pagina
    / 768
  • Tabla de contenidos
  • MARCADORES
  • Valorado. / 5. Basado en revisión del cliente
Vista de pagina 370
350 MySQL - Technische Referenz f¨ur Version 5.0.1-alpha
Spalten Konstanten in der WHERE-Klausel sind. Folgende Anfragen werden einen Index
benutzen, um den ORDER BY-Teil aufzul¨osen:
SELECT * FROM foo ORDER BY schluessel_teil1,schluessel_teil2,schluessel_teil3;
SELECT * FROM foo WHERE spalte=konstante ORDER BY spalte, schluessel_teil1;
SELECT * FROM foo WHERE schluessel_teil1=konstante GROUP BY schluessel_teil2;
In einigen allen kann eine Anfrage so optimiert werden, dass Sie Werte abruft, ohne in
der Daten-Datei nachzuschlagen. Wenn alle benutzten Spalten einer Tabelle numerisch
sind und ein ganz links stehendes Pr¨afix f¨ur einen Schl¨ussel ergeben, onnen die Werte
mit gr¨oßerer Geschwindigkeit aus dem Index-Baum a/jointfilesconvert/293675/bgerufen werden:
SELECT schluessel_teil3 FROM tabelle WHERE schluessel_teil1=1
Angenommen, Sie f¨uhren folgendes SELECT-Statement aus:
mysql> SELECT * FROM tabelle WHERE spalte1=val1 AND spalte2=val2;
Wenn es einen mehrspaltigen Index auf spalte1 und spalte2 gibt, onnen die entsprechen-
den Zeilen direkt geholt werden. Wenn es separate einspaltige Indexe auf spalte1 und
spalte2 gibt, versucht der Optimierer, den restriktivsten Index zu finden, indem er entschei-
det, welcher Index weniger Zeilen finden wird, und diesen Index dann benutzen, um Zeilen
abzurufen.
Wenn die Tabelle einen mehrspaltigen Index hat, kann jedes Pr¨afix auf der linken Seite
vom Optimierer verwendet werden, um Zeilen zu finden. Wenn Sie zum Beispiel einen
dreispaltigen Index auf (spalte1,spalte2,spalte3) haben, haben Sie Suchm¨oglichkeiten
auf (spalte1), (spalte1,spalte2) und (spalte1,spalte2,spalte3) indiziert.
MySQL kann keinen teilweisen Index verwenden, wenn die Spalten kein ganz linkes Pr¨afix
des Indexes bilden. Angenommen, Sie haben folgende SELECT-Statements:
mysql> SELECT * FROM tabelle WHERE spalte1=wert1;
mysql> SELECT * FROM tabelle WHERE spalte2=wert2;
mysql> SELECT * FROM tabelle WHERE spalte2=wert2 AND spalte3=wert3;
Wenn es einen Index auf (spalte1,spalte2,spalte3) gibt, benutzt nur die erste der
drei Anfragen den Index. Die zweite und dritte Anfrage umfassen indizierte Spalten,
aber (spalte2) und (spalte2,spalte3) sind nicht die ganz linken Pr¨afixe von
(spalte1,spalte2,spalte3).
MySQL benutzt Indexe auch f¨ur LIKE-Vergleiche, wenn das Argument f¨ur LIKE eine
Zeichenketten-Konstante ist, die nicht mit einem Platzhalterzeichen anf¨angt. Die folgenden
SELECT-Statements zum Beispiel benutzen Indexe:
mysql> select * from tabelle where schluessel_spalte LIKE "Patrick%";
mysql> select * from tabelle where schluessel_spalte LIKE "Pat%_ck%";
Im ersten Statement werden nur Zeilen mit "Patrick" <= schluessel_spalte <
"Patricl" ber¨ucksichtigt. Im zweiten Statement werden nur Zeilen mit "Pat" <=
schluessel_spalte < "Pau" ber¨ucksichtigt.
Die folgenden SELECT-Statements benutzen keine Indexe:
mysql> select * from tabelle where schluessel_spalte LIKE "%Patrick%";
mysql> select * from tabelle where schluessel_spalte LIKE andere_spalte;
Im ersten Statement angt der LIKE-Wert mit einem Platzhalterzeichen an. Im zweiten
Statement ist der LIKE-Wert keine Konstante.
Vista de pagina 370
1 2 ... 366 367 368 369 370 371 372 373 374 375 376 ... 767 768

Comentarios a estos manuales

Sin comentarios