# mysql-Abfrage schneller machen



## jenzi (8. Feb 2007)

hallo,

ich hab eine Tabelle mit über 5000000 Einträgen und 3 Schlüsseln.
Ich brauche nur den ersten Datensatz bei einer bestimmten sortierung. Das mache ich so:

SELECT * FROM test ORDER BY k3, k2, k1 LIMIT 1

Dabei werden alle Datensätze in dem SELECT erst nach k3, dann nach k2 und dann nach k1 sortiert und nur der erste ausgegeben.
Leider dauert die Abfrage ca. 10 sek. Das ist viel zu lang.
Ist es möglich, die Datensätze schon in der Datenbank sortiert abzulegen und dann einfach eine Abfrage die Abgebrochen wird sobald der erste Datensatz gefunden wurde zu machen?

z.B.:
SELECT * FROM test [EXIT wenn 1. Datensatz gefunden]


----------



## DP (8. Feb 2007)

kannst im mysql die keybuffersize höher drehen, dann muss nicht soviel zwischengespeichert werden


----------



## Guest (8. Feb 2007)

keybuffersize? kenn ich nich. ich hab ne MySQL-Console zur verfügung. Kann ich das da machen?


----------



## DP (8. Feb 2007)

ja, brauchst aber rootrechte.

hier mal was zu lesen:

http://www.databasejournal.com/features/mysql/article.php/3367871


----------



## Guest (8. Feb 2007)

kann ich die Tabelle irgendwie sortieren?
dann kann ich ein SELECT ohne ORDER BY ausführen. das geht viel schneller (0.01 sek.).


----------



## AlArenal (8. Feb 2007)

Nein kannst du nicht. Wie stellst du dir das auch vor, dass MySQL bei jedem UPDATE und INSERT eine möglicherweise mehre hndert MB (oder mehr) große Datei komplett neu schreibt, nur damit für eine einzige Abfrage aus einer Vielzahl von möglichen Abfragen alles schön vorsortiert ist?

Auch wenn du eingangs von drei Schlüsseln sprachst, frage ich dennoch ketzerisch: Sind k3, k2, k1 indiziert?


----------



## Guest (8. Feb 2007)

Ich denke mal du meinst das:

CREATE TABLE `tabelle1` (
`k1` INT NOT NULL,
*INDEX ( `k1` )*
);

ich hab das jetzt mal mit allen drei keys gemacht. weiß zwar nicht warum, aber das select ist mit sortieren deutlich schneller als vorher.


----------



## AlArenal (8. Feb 2007)

Du solltest dich mal mit der Funktionsweise von Datenbanken beschäftigen und wie man Daten halbwegs intelligent in ihnen ablegt und ebenso halbwegs sinnig wieder heraus bekommt, zusätzlich zu INformationen zu den diversen Konfigurationsoptionen bei MySQL.

Sonst erwischt du dich nämlich shcnell dabei dein Auto nur zu schieben, anstatt dich von ihm fortbewegen zu lassen.


----------

