#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, чтобы повысить производительность