Ich habe eine Tabelle mit einer Stichprobe von ~ 40k Zeilen, wobei jede Zeile einen Punkt (Längen- und Breitengrad) enthält. Ich verwende die räumliche Erweiterung von MySQL, um herauszufinden, welche Punkte innerhalb einer Grenze existieren.MySQL verwendet keinen möglichen Index - warum?
Wenn ich innerhalb einer Grenze suche, wo ich weiß, dass es wenige Ergebnisse geben wird, wird der Index verwendet, wie es sein sollte. Mein Testdatensatz besteht jedoch hauptsächlich aus Standorten in ganz Großbritannien (und der größere Live-Datensatz wird wahrscheinlich in Prozent ähnlich sein). Wenn ich in diesem Begrenzungsrahmen zu suchen, wird der Index nicht gebraucht bekommen und stattdessen ein vollständiger Tabellenscan durchgeführt wird:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE ep ALL PRIMARY,location NULL NULL NULL 37221 Using where
So scheint es, als ob MySQL ist die Entscheidung, den Index zu ignorieren, wenn die Anzahl der Zeilen, die es erwartet zu finden ist in der Nähe der Gesamtzahl der Zeilen.
Ist dies der Fall, und wenn ja, kann ich die Verwendung des Index erzwingen oder anderweitig sicherstellen, dass ein vollständiger Tabellenscan vermieden wird?
Geben Sie Ihre Suchanfrage ein. Wahrscheinlich bekommen Sie viele Ergebnisse zurück. In diesem Fall wird vermieden, dass der Index durchlaufen wird, um viele Ergebnisse zurückzugeben, da er nicht benötigt wird. –
Auch wenn Sie 'table_structure' posten können, wäre auch gut. –