SQL Schnellere Abfragen (anderes DBMS?)

mumfi

Banned
Registriert
Juli 2014
Beiträge
58
Hallo,

ich habe eine MySQL Datenbank-Tabelle mit ca. 500.000 Datensätzen.
(ca.150MB Daten).

Ich möchte, dass man auf einer Webseite Suchbegriffe eingeben kann, die dann in dieser Datenbank gesucht werden.
Das dauert mir aber viel zu lange. (ca. 4-5 Sekunden - das ist zwar nicht soo lange, aber wenn man als Besucher einer Seite so lange warten muss, ist es schon nervig)

Ich habe bereits einen Index auf das Feld gelegt, das durchsucht wird.

Was kann ich noch tun um die Abfrage zu beschleunigen?

Es handelt sich nur um eine einzige Tabelle ohne Relationen. Es ist also nicht unbedingt notwendig, dass ich eine Relationale Datenbank verwende. Aber ich weiß gar nicht so richtig was es an brauchbaren Alternativen gibt.
 
Auf welcher Hardware läuft diese Datenbank? Das sind wirklich nur 150MB? Das wären "nur" 300 Bytes pro Datensatz.
Für 150MB an Daten sind 4 Sekunden Antwortzeit viel zu viel bei heutigen Hauptspeichergrößen.

Kannst du die Tabellendefinition inkl. Index posten?
 
Hi,

Du brauchst keine andere Datenbank, vermutlich liegts am fehlenden Index über den Suchbegriffen, nen verhunzten SQL Statement (was aber bei nur einer Tabelle wohl nicht der fall ist) oder deine Hardware ist unterdimensioniert. Worauf läuft das denn?

Grüße
Winni

PS: Mit Hardware unterdimensioniert meine ich in dem Fall ggf. eine Mietinstanz einer DB, ansonsten sollte das auch auf nen 5 Jahre alten Laptop laufen.
 
Ich würde erst mal versuchen, die bestehende Abfrage zu beschleunigen. MySQL sollte für ein einfaches SELECT mit Index auf 500k Zeilen bei weitem keine 4-5 Sekunden brauchen (außer vielleicht auf lahmer Hardware). Wenn du hier ein paar Dinge für uns postest, können wir dir vielleicht helfen:

- Die Ausgabe von "SHOW CREATE TABLE tabellenname"
- Die SQL-Abfrage selber
- Die Ausgabe, die du bekommst, wenn du "EXPLAIN" vor die Abfrage schreibst und das dann ausführst
 
Also die Datenbank läuft auf einem vServer mit 1 Prozessorkern, 2GB RAM und Debian


CREATE TABLE IF NOT EXISTS `word` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`description` varchar(250) CHARACTER SET latin1 NOT NULL,
`description1` varchar(250) NOT NULL,
`url` varchar(250) CHARACTER SET latin1 NOT NULL,
PRIMARY KEY (`id`),
KEY `url` (`url`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=485630 ;


Indexe liegen auf description und description1
 
Zurück
Oben