PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SELECT mit INDEX-Auswahl



Torsten.E
29-04-2004, 15:27
Wenn ich eine Tabelle ADRESSEN habe mit 3 Indexen.

1. ... INDEX idxid ON id
2. ... INDEX idxname ON name
3. ... INDEX idxvorname_name ON name(10),vorname(10)
(oder sollen die Indexe anders benannt werden)

Wenn ich jetzt einen SELECT erstelle und möchte, dass der für die
Suche den 3. Index auswählt, wie muß so eine SELECT-Anweisung aussehen.

$Vorname= "Torsten";
$Name="KennIchNicht";

SELECT * FROM adressen WHERE ??????

Also wie geht die "Vorauswahl" des Indexes. Natürlich
soll das Ergebnis entsprechen dem Index dann auch
sortiert sein.

Torsten.E

Pingu
29-04-2004, 15:40
Indexe werden von der Datenbank nur intern genutzt, um die Daten später schneller finden zu können oder schneller sortieren zu können. Siehe Dokumentation: http://dev.mysql.com/doc/mysql/de/MySQL_indexes.html

Pingu

Torsten.E
29-04-2004, 16:22
Ja, aber woher weis MySQL welchen INDEX er bei einer SELECT Anweisung denn verwenden soll ?

Torsten.E

Torsten.E
29-04-2004, 16:25
Ups.. ich hab die Lösung gefunden

Index für mehrere Spalten und entsprechende SELECT Anweisung (http://dev.mysql.com/doc/mysql/de/Multiple-column_indexes.html)

ABER:

Wenn ich bei der SELECT Anweisung keine ORDER Anweisung mitgebe,
nach was ist das Ergebnis dann sortiert. Nach dem INDEX oder zufällig.

Torsten.E

Pingu
29-04-2004, 19:36
Ich weiß es nicht.

Meine Meinung ist, daß es die Reichenfolge im Index oder umgekehrt ist. Denn wenn MySQL den Index einliest, wird er ihn sicherlich von vorne bis hinten oder hinten bis vorne lesen. Jedesmal wenn die Lösung (das richtige Ergebnis) gefunden wurde, wird sie in dies Lösungsmatrix eingetragen.

Aber ehrlich gesagt: ist das wichtig? Mit oder ohne Index, die Ausgabe wird nie zufällig, sondern meistens der Reihenach wie die Daten eingetragen wurden. Außerdem, entweder möchte ich eine explizite Sortierung oder die Sortierung ist egal, dann ist es auch egal, ob er nach dem Index sortiert.

Pingu

Hans-Georg Normann
29-04-2004, 20:54
Also der Index hat IMO nichts mit der Sortierung zu tun. Werden in der Suchoption aber Indexfelder angesprochen, dann hat man einen enormen Geschwindigkeitszuwachs. Wenn man mal mehr als 100000 Records durchsucht, dann merkt man das ganz deutlich.

Hans

Torsten.E
30-04-2004, 08:11
Wir haben in unserer Adressdatei ca. 290.000 Adressen.

Das ich über einen INDEX suche ist klar, also z.B. auf den NAME.

Wenn das Ergebnis eine Tabelle mit z.B. 10 Datensätzen ist, nach
welchem Kriterium sind diese dann sortiert. Nach dem INDEX oder
garnicht ?

Torsten.E

Thomas Engelke
30-04-2004, 12:23
Ich kann nur für eine anderes, eher unbekanntes DBMS sprechen, aber dort sind die Regeln für Sortierung ungefähr wie folgt:

1. Indexnutzung angegeben (in der Sprache läßt sich über ein Sprachkonstrukt ein Index forcieren
2. BY-Klausel angegeben: Diese wird analysiert und der Index genutzt, der am meisten Felder davon beinhaltet
3. BY-Klausel angegeben: Es wird der Index genutzt, der mindestens ein Feld der Klausel beinhaltet.
4. Wenn keine BY-Klausel angegeben ist, wird nach dem Primary Index sortiert.

Kein anspruch auf Vollständigkeit, die Schulung ist schon eine Weile her.

TME

Edit: Wenn zwei Indizies gleich hoch bewertet werden (gleiche Anzahl an Match-Feldern zu der BY-Klausel), dann wird der höher bewertet, der der Primärindex ist - oder, falls keiner der beiden der Primärindex ist, der, der zuerst erstellt wurde.

Hans-Georg Normann
30-04-2004, 19:52
Original geschrieben von Torsten.E
Wir haben in unserer Adressdatei ca. 290.000 Adressen.

Das ich über einen INDEX suche ist klar, also z.B. auf den NAME.

Wenn das Ergebnis eine Tabelle mit z.B. 10 Datensätzen ist, nach
welchem Kriterium sind diese dann sortiert. Nach dem INDEX oder
garnicht ?

Torsten.E Wo ist das Problem? Gib doch die blöde Sortierung an und du weist mit Gewissheit, dass die stimmt. Einfach ein ORDER BY FELD_A, FELD_B, FED_C anhängen. Meine Datenbank Enthält Tabellen mit ca. 700.000 Records. Da gibt's auch kein Stress.

In der Zeit, die wir jetzt darauf verbraten haben zu diskutieren wie denn nun die Sortierung ist, hätte ich 50 SQL Anweisungen ändern können um die Sortierung zu erzwingen. ;)

Hans