使用半径过滤器的mysql8最近的地方

问题描述

首先,我使用的是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 - 创建的索引是否正确?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)