Время выполнения: 12 секунд
Код: Выделить всё
SELECT * FROM table_localities AS address
LEFT JOIN table_province AS province ON (ST_CONTAINS(province.geo, Point(address.lat, address.lng)))
WHERE province.delivery_area_id = :id
id
select_type
таблица
разделы
тип
возможные_ключи
ключ
key_len
ref
строки
фильтрованные
Дополнительный
1
ПРОСТОЙ
адрес
ALL
fk_delivery_area_id
1850
50.0
Использование где
1
ПРОСТОЙ
регион
ref
fk_delivery_area_id,idx_geo
fk_delivery_area_id
8
const
300
100,0
Использование где
Время выполнения: гораздо больше, чем 16 секунд
Код: Выделить всё
SELECT * FROM table_localities AS address
LEFT JOIN table_province AS province USE INDEX (idx_geo) ON (ST_CONTAINS(province.geo, Point(address.lat, address.lng)))
WHERE province.delivery_area_id = :id
id
select_type
таблица
разделы
тип
возможные_ключи
ключ
key_len
ref
строки
фильтрованные
Дополнительный
1
ПРОСТОЙ
адрес
ALL
fk_delivery_area_id
1850
50.0
Использование где
1
ПРОСТОЙ
регион
ВСЕ
idx_geo
21699
100,0
Диапазон проверяется для каждой записи (карта индекса: 0x20)
Подробнее здесь: https://stackoverflow.com/questions/798 ... t-contains
Мобильная версия