2016-10-02 3 views
1
set @dist = 100; 
set @rlng1 = [email protected]/abs(cos(radians(31.34747060000000))*69); 
set @rlng2 = [email protected]/abs(cos(radians(31.34747060000000))*69); 
set @rlat1 = 31.34747060000000-(@dist/69); 
set @rlat2 = 31.34747060000000+(@dist/69); 

SELECT name,storeId, ST_DISTANCE(POINT(48.67607474000000,31.34747060000000), 
           POINT(lng, lat)) AS distance 
FROM store 
WHERE ST_WITHIN(POINT(48.67607474000000,31.34747060000000), 
       ENVELOPE(LINESTRING(point(@rlng1, @rlat1), 
         point(@rlng2, @rlat2)))) 
ORDER by distance 
LIMIT 10 OFFSET 0; 

Ich habe eine Abfrage in der Nähe von Benutzerspeicher zu erhalten ..mysql Suchauftrag nach Entfernung ist langsam

diese meine Frage ist .. wenn ich Abfrage ausführen normalerweise ohne (ORDER nach Entfernung) meine Abfrage im 0,0161 Sekunden Aber wenn ich (ORDER by distance) benutze meine Abfrage in 2.8791 Sekunden.

Was soll ich tun, um die beste Laufzeit für meine Abfrage zu erhalten, um eine Reihenfolge nach Entfernung zu erhalten?

Antwort

1

Ohne ORDER BY, es wird 10 Zeilen betrachten, berechnen Sie die Sachen und liefern die Ergebnisse.

Mit ORDER BY, wird es bei schauen alle Reihen, berechnen Sachen für alle von ihnen, um die Ergebnisse sortieren, und schließlich liefern die ersten 10.

Welche Indizes haben Sie?

Bitte geben Sie SHOW CREATE TABLE an.