mysql-Abfrage schneller machen

Status
Nicht offen für weitere Antworten.
J

jenzi

Gast
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

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

Guest

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

Guest

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

AlArenal

Top Contributor
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?
 
G

Guest

Gast
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

Top Contributor
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.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben