Mysql zipcode范围查询优化

Mysql zipcode范围查询优化,mysql,zipcode,Mysql,Zipcode,我正在尝试建立一个搜索引擎,通过输入zipcode,你可以在其中找到位置 我用了这个指南 搜索将尝试查找2个国家/地区的zipcodes。 在特定搜索中,我得到以下错误: Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 13 bytes) in 以下是查询: SELECT dest.plz, dest.ort, ACOS( SIN(RADIANS(src.lat)) * SIN(R

我正在尝试建立一个搜索引擎,通过输入zipcode,你可以在其中找到位置

我用了这个指南

搜索将尝试查找2个国家/地区的zipcodes。 在特定搜索中,我得到以下错误:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 13 bytes) in
以下是查询:

SELECT
dest.plz,
dest.ort,
ACOS(
SIN(RADIANS(src.lat)) * SIN(RADIANS(dest.lat))
+ COS(RADIANS(src.lat)) * COS(RADIANS(dest.lat))
* COS(RADIANS(src.lon) - RADIANS(dest.lon))
) * 6380 AS distance
FROM geodb_data dest
CROSS JOIN geodb_data src
WHERE src.plz = $zipEncode
AND dest.plz <> src.plz
HAVING distance < $distanceEncode
ORDER BY distance;
选择
目的地plz,
目的港,
ACOS(
SIN(弧度(src.lat))*SIN(弧度(dest.lat))
+COS(弧度(中心纬度))*COS(弧度(目标纬度))
*COS(弧度(src.lon)-弧度(dest.lon))
)*6380作为距离
从geodb_数据目的地
交叉连接geodb_数据src
其中src.plz=$zipEncode
和dest.plz src.plz
距离小于$distance编码的
按距离排序;

我的问题是,如何优化此查询

您可以尝试空间数据的扩展:。只是好奇,用“WHERE ACOS(…等…”替换“HAVING distance”是否更快?我还想知道这是否会更快。这里有一个SQL生成器,用于以不同的精度创建zipcode周围的半径(您希望线条的弯曲度如何-。它会生成通用SQL,然后您可以为自己的数据库进行修改。