mysql8 ближайшее место с использованием радиусного фильтра

#mysql #sql #mysql-8.0

Вопрос:

Прежде всего, я использую mysql8. У меня есть таблица, в которой хранятся штаты моей страны. Мой стол ddl-это:

 CREATE TABLE state_v2(
    `id` int(11) NOT NULL,
    uf_code INT NULL,
    uf VARCHAR(2) NOT NULL,
    `name` VARCHAR(100) NOT NULL,
    latitude FLOAT(8) NOT NULL,
    longitude FLOAT(8) NOT NULL,
    `country` varchar(75) NOT NULL,
    coord POINT SRID 4326 NOT NULL,
    PRIMARY KEY (id),
    unique (country, uf_code),
    unique (latitude, longitude),
    index (uf_code)
);

ALTER TABLE state_v2 ADD SPATIAL INDEX(coord);
 

Пользователь выбирает место, и я использую это место в качестве ссылки, чтобы найти ближайший штат менее чем в 100 км. (параметр является правильной точкой).

Я использую этот запрос:

 SELECT * FROM ( 
    SELECT 
    sv.*,
    ST_distance_sphere(
        $param, 
        sv.coord) as distance
    FROM state_v2 sv 
    WHERE  ST_distance_sphere(
        $param, 
        sv.coord) < 100000
) as temp
order by temp.distance;
 

1 — Верен ли этот запрос? Я беспокоюсь о производительности такого использования, оно использует полное сканирование таблицы.

2 — Правильно ли созданы индексы?

Комментарии:

1. Вы могли бы ввести ограничение в свое условие where, чтобы повысить производительность