gpt4 book ai didi

oracle - 如何将 Google Maps mysql 查询转换为 oracle,是否会影响性能?

转载 作者:行者123 更新时间:2023-12-02 00:26:49 26 4
gpt4 key购买 nike

我试图在一个点的 25 英里范围内寻找企业,并在此处看到了 Google 的“正确”MySQL 查询 (http://code.google.com/apis/maps/articles/phpsqlsearch.html#findnearsql):

SELECT id, (3959 * acos(cos(radians(37)) * cos(radians(lat)) * 
cos(radians(lng) - radians(-122)) + sin(radians(37)) * sin(radians(lat))))
AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;

但是,我的数据库在 Oracle 中,我想将此查询转换为 oracle,所以这是我创建的,它似乎也能正常工作。

SELECT id, ( 3959 * acos( cos( degree2radian(41.912434) ) * cos( degree2radian( latitude ) ) * cos( degree2radian( longitude ) - degree2radian(-87.6357596) ) + sin( degree2radian(41.912434) ) * sin( degree2radian( latitude ) ) ) ) AS distance 
FROM markers
GROUP BY id, latitude, longitude
HAVING ( 3959 * acos( cos( degree2radian(41.912434) ) * cos( degree2radian( latitude ) ) * cos( degree2radian( longitude ) - degree2radian(-87.6357596) ) + sin( degree2radian(41.912434) ) * sin( degree2radian( latitude ) ) ) ) < 25 ;

其中,我还定义了一个函数:

create or replace
FUNCTION degree2radian(pin_Degree IN NUMBER)
RETURN NUMBER DETERMINISTIC IS
BEGIN
RETURN pin_Degree / 57.2957795; --1R = 180C
END degree2radian;

似乎一切正常,但我不确定我是否正确转换了查询,如果是这样,是否存在任何性能问题,或者我可以通过任何方式清理此查询(即 DRY 原则等)? ?

最佳答案

Oracle 似乎没有针对它的 native 函数,因此我怀疑您可以这样做。

廉价的解决方案:使用触发器违反规范化和弧度列中的度值。

昂贵的解决方案:购买 Oracle Spatial,由于使用 r-tree 索引,它可以更快地回答这种性质的空间问题。

关于oracle - 如何将 Google Maps mysql 查询转换为 oracle,是否会影响性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8564487/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com