Simple SQL-Abfrage langsam trotz INDEX

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Simple SQL-Abfrage langsam trotz INDEX

Beitrag von mgutt »

Hi,

hier die Abfrage:
SELECT search_kw
FROM phpbb_search_keywords
WHERE forum_location = 'www.maxrev.de'
ORDER BY search_tries DESC
LIMIT 100
Die braucht im Schnitt 6 Sekunden.

So braucht sie nur 0,0001:
SELECT search_kw
FROM phpbb_search_keywords
ORDER BY search_tries DESC
LIMIT 100
Ich weiß, dass es ziemlich suboptimal ist, mit Strings zu vergleichen, aber auf forum_location ist ein Index und ich verstehe nicht, warum das sogar gar keine Verbesserung resultierte, als ich den Index gesetzt habe.

Derzeit umfasst die Tabelle ca. 500.000 Zeilen.

Wenn das wirkich so viel ausmacht, dann stelle ich das ganze Projekt so um, dass es nur noch IDs vergleicht, aber das das so viel ausmacht hätte ich echt nicht gedacht.

Gruß
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Seether
Mitglied
Beiträge: 1446
Registriert: 10.10.2002 23:42

Beitrag von Seether »

Habe zumindest bei mir lokal ein ähnliches Problem.

Aus einer 300k Zeilen Tabelle nehme ich einen Wert und verändere die Zeile einer 600k Zeilen tabelle bei der Zeile mit dem Wert aus Tabelle 1.
In 60 Sekunden schaffe ich gerade mal 170 Zeilen so abzufragen ...
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

Ist der Vergleichswert eine ID oder ein String (z.B. VARCHAR)? Hast Du auf dem Vergleichswert einen Index gesetzt?

Ich habe mal einen Test gemacht mit einer vollen Tabelle.. also ca. 50 Millionen Zeilen oder so. Eben bis 4 GB, also das Maximum einer Tabelle erreicht war. Da war ein string = suchwort nicht mehr machbar. Nach 10 Minuten hat der MySQL Dienst immer schlapp gemacht.

Ich glaube ab einer gewissen Zeilengröße gehen nur noch IDs und wenn die erreicht ist, dann sollte man wohl mit mehreren Tabellen arbeiten.

Gruß
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

Ok zurück zu mir :D

Ich habe es auf IDs geändert und konnte das Problem zumindest analysieren. Also die Abfrage:

Code: Alles auswählen

SELECT search_kw
FROM phpbb_search_keywords
WHERE host_id =1
ORDER BY search_tries DESC 
LIMIT 100
War schnell sobald ich KEINEN Index auf host_id hatte. Sobald einer vorhanden ist, dauert die Abfrage bis zu 10 Sekunden.

Anscheinend verhalten sich INDEX Spalten doch anders als ich dachte. Jemand eine Erklärung dazu?
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Antworten

Zurück zu „Coding & Technik“