2016-10-02 14 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; 

У меня есть запрос, чтобы получить рядом с пользователем магазина ..MySQL порядок поиска по расстоянию медленно

это мой запрос .. когда я запускаю запрос обычно без (ORDER по расстоянию) мой пробег запрос в 0.0161 секунды. Но когда я использую (ORDER by distance), мой запрос выполняется в 2.8791 секунде.

Что мне делать, чтобы получить лучшее время выполнения по моему запросу, имеют порядок на расстоянии?

ответ

1

Без ORDER BY он будет смотреть 10 строк, вычислять материал и доставлять результаты.

С ORDER BY, он будет смотреть на все строк, вычислите материал для всех из них, сортировать результаты, и, наконец, доставить первые 10.

Какие показатели у вас есть?

Просьба указать SHOW CREATE TABLE.