首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >oracle地理编码查询非常慢,如何优化动态字段?

oracle地理编码查询非常慢,如何优化动态字段?
EN

Stack Overflow用户
提问于 2012-02-24 18:10:41
回答 3查看 740关注 0票数 2

我有一个Oracle表12K记录/gyms,下面的查询大约需要0.3秒:

代码语言:javascript
运行
AI代码解释
复制
SELECT (acos(sin(41.922682*0.017453293) * 
sin(to_number(LATITUDE)*0.017453293) + cos(41.922682*0.017453293) *
cos(to_number(LATITUDE)*0.017453293) * cos(to_number(LONGITUDE)*0.017453293 -
(-87.65432*0.017453293)))*3959) as distance 
FROM gym

但是,我想返回距离<=为10的所有记录,并且只要我运行以下查询,我的查询执行时间就会跳到~5.0s:

代码语言:javascript
运行
AI代码解释
复制
SELECT * from (SELECT (acos(sin(41.922682*0.017453293) *
sin(to_number(LATITUDE)*0.017453293) + cos(41.922682*0.017453293) *
cos(to_number(LATITUDE)*0.017453293) * cos(to_number(LONGITUDE)*0.017453293 -
(-87.65432*0.017453293)))*3959) 
as distance FROM gym) 
WHERE distance <= 10 
ORDER BY distance asc

你知道如何在Oracle中优化这一点吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-24 19:14:09

最重要的是:

  • 使用where子句排除所有超过10公里/英里的经度和纬度(?)离开你的观点。因此,您只需要在10 So /英里的区块内计算窗口。

作为一个非常粗略的近似,你可以使用0.1度作为规则,这是11公里在赤道,而其他地方更少,因此添加

代码语言:javascript
运行
AI代码解释
复制
 WHERE (longitude - -87.65)<0.1 and (latitude - 41.922)<0.1

(如果您使用嵌套查询,请将此添加到最深层)

  • 由于您的距离小于10公里或英里,因此您可以将一个单位纬度/经度的长度视为常数,然后使用公式计算一次。然后你可以使用毕达哥拉斯法则来计算距离(在添加边界框之后)。这就是人们通常使用projected数据进行计算的基本原因。

其他事情:

如果没有索引,

  • order by总是很慢。您需要订购吗?
  • 将您的经度和纬度以数字形式保存在您的表格中。为什么要将它们存储在不同的数据库中?
票数 4
EN

Stack Overflow用户

发布于 2012-02-24 18:12:34

用钱。具体地说,Oracle Spatial。

票数 1
EN

Stack Overflow用户

发布于 2012-02-24 19:23:37

1)如何测量第一个查询的0.3秒?我敢打赌,您测量的是获取第一行所需的时间,而不是获取最后一行所需的时间。如果可能的话,大多数客户端工具将在数据库完成生成结果之前很久就开始显示结果(如果没有ORDER BY,几乎可以肯定)。因此,您可能正在测量第一个查询计算到前50个或500个健身房的距离所需的时间,而最后一个查询计算到所有12,000个健身房的距离所需的时间。

2) Oracle Locator是Oracle数据库的所有版本都附带的一个特性,它包括使用空间索引的能力,并提供了计算距离的内置方法。它远不如Oracle Spatial强大,但对于您在这里讨论的内容来说,它应该已经足够了。

3)如果你想使用你自己的,我同意johanvdw的建议,使用bounding box

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9435834

复制
相关文章
SVG与foreignObject元素
可缩放矢量图形Scalable Vector Graphics - SVG基于XML标记语言,用于描述二维的矢量图形。作为一个基于文本的开放网络标准,SVG能够优雅而简洁地渲染不同大小的图形,并和CSS、DOM、JavaScript等其他网络标准无缝衔接。SVG图像及其相关行为被定义于XML文本文件之中,这意味着可以对其进行搜索、索引、编写脚本以及压缩,此外这也意味着可以使用任何文本编辑器和绘图软件来创建和编辑SVG。
WindRunnerMax
2023/08/13
5630
SVG - 基本的SVG属性
SVG - 基本的SVG属性 HTML5学堂:在前一篇文章当中,我们讲解了SVG的基本知识,并且为大家介绍了如何在html文件当中书写SVG代码。今天我们具体讲解SVG的基本属性,如何使用SVG完成线、圆等图形的绘制。 line - 直线 拥有四中基本属性 x1 属性在 x 轴定义线条的开始 y1 属性在 y 轴定义线条的开始 x2 属性在 x 轴定义线条的结束 y2 属性在 y 轴定义线条的结束 demo <line x1 = "20" y1 = "20" x2 = "200" y2 = "180" st
HTML5学堂
2018/03/12
4.1K0
其他html元素和属性
disabled:标识元素不可用,就是用户不可互动,比如 button 的 disabled,就是按钮不能点击
鹤川
2023/03/21
7400
获取元素的样式属性 原
document.getElementById("test").style.color 这种方式获取的只是内联样式,并不能获取内部样式和外部样式,下面为内部样式
tianyawhl
2019/04/04
2.4K0
一篇文章带你了解SVG <tspan>元素
SVG <tspan>元素用于在SVG中绘制多行文本。不必绝对定位每行文本,该 <tspan>元素使相对于前一行文本放置一行文本成为可能。该 <tspan>元素还使用户可以一次选择并复制粘贴几行文本,而不仅仅是一个text元素。
前端进阶者
2021/01/22
2.2K0
一篇文章带你了解SVG <use> 元素
SVG <use>元素可以重用SVG文档中其他位置(包括 <g>元素和 <symbol>元素)的SVG形状。可以在 <defs>元素内部(使形状直到使用之前不可见)或外部定义重用形状。
前端进阶者
2021/01/22
3.9K0
一篇文章带你了解SVG <Animation> 动画元素
SVG <Animation> 动画元素用于为SVG图形制作动画。动画元素最初是在同步多媒体集成语言(SMIL)中定义的。在动画中,必须指定属性,运动,颜色,动画的开始时间和动画的持续时间的开始和结束值。
前端进阶者
2021/01/22
3K0
CSS3中元素背景的 gradient 渐变属性
前段时间我写过一篇:CSS中background属性总结 整理了background的常用属性。
德顺
2019/11/13
1.4K0
SVG - 创建SVG图片
SVG - 创建SVG图片 HTML5学堂:之前在绘图中使用到了SVG以及Canvas,因此决定最近将绘图类的知识和大家分享一下。从研究角度来说,SVG比Canvas要难很多。没有合适的中文文档,自己只能去翻译英文文档(唉,英语不好啊)。今天先来说说SVG的基本知识以及创建SVG的基本方法。 SVG是什么 W3C推荐的网页图形格式,类似于Flash,SVG是一种描述二维矢量图形的标记语言,但它是一种开发的以XML为基础的语言,不是一种私有语言。 SVG的支持程度 IE8-以及Android 2.3默认浏览器
HTML5学堂
2018/03/12
4.2K0
SVG绘图-SVG.js
官方文档:https://svgjs.dev/docs/3.0/getting-started/
码客说
2021/12/05
6.3K0
SVG绘图-SVG.js
Python+Selenium 技巧篇-svg标签内元素的xpath定位方式
这种元素比较特殊,需要通过 name 属性来进行定位。 写法如下: //*[name()="svg"]//*[name()="image"]
小蓝枣
2020/09/23
2K0
SVG 的 path 属性绘制图形
SVG 是一种基于 XML 语法的图像格式,全称是可缩放矢量图(Scalable Vector Graphics)。
逃跑计划
2022/08/04
1.5K0
SVG 的 path 属性绘制图形
SVG
HTML体系中,最常用的绘制矢量图的技术是SVG和HTML5新增加的canvas元素。这两种技术都支持绘制矢量图和光栅图。不过canvas更偏重于动画的制作。所以,绘制矢量图的大任落到了SVG身上。
踏浪
2019/07/31
5.7K0
SVG
SVG之旅:SVG的图层和渲染顺序
不管是在制图软件中还是Web页面的DOM元素,都有层的概念。在制图软件中,大家比较熟悉,能非常的清晰的看出图层的概念。而在Web页面中,特别是我们熟悉的HTML的DOM中,其实他也有层的概念。不同的是制图软件可以用鼠标拖动图层来改变层次,而DOM中需要依赖于CSS的属性来控制他的层次关系。其实在SVG中,他也有层和渲染顺序的概念。今天我们就来看看SVG中的图层和渲染顺序相关的知识。 SVG的图层 首先我们来看SVG图层这个东东,相信只要使用过制图软件,比如Photoshop或者Sketch等,对于图层的认识
企鹅号小编
2018/02/28
7.1K0
SVG之旅:SVG的图层和渲染顺序
修改表单元素中placeholder属性样式、清除IE浏览器中input元素的清除图标和眼睛图标
在做项目的时候,一般表单元素的placeholder属性样式都是使用浏览器默认的,但有时候为了追求设计上的美感需要修表单元素的placeholder样式(也有可能是遇到了一个处女座的设计师或者是客户),就不等不修改一下placeholder的样式。可以通过下面的代码修改样式:
用户6167509
2019/09/04
2K0
修改表单元素中placeholder属性样式、清除IE浏览器中input元素的清除图标和眼睛图标
9.25【前端开发】超链接伪类:如何在svg元素上使用超链接伪类?
a:link 未单击访问时超链接样式 a:link{color:#9ef5f9;}
LIYI
2020/10/09
2.4K0
9.25【前端开发】超链接伪类:如何在svg元素上使用超链接伪类?
网页中如何使用SVG
① 如果文件中的根元素 带有明确的 height 和 width 属性,则它们会被用作文件的固有尺寸; ② 如果只指定 height 或者 width ,并且 带有 viewBox 属性,那么将用 viewBox 计算宽高比,图像会被缩放已匹配指定的尺寸; ③ 如果 带有 viewBox 属性而没有尺寸,则 viewBox 的 height 和 width 将被视为像素长度。 ④ 没有如何尺寸,浏览器应该为嵌入内容应用默认 HTML 尺寸,通常是 150 像素高,300 像素宽。
奋飛
2021/08/31
1.9K0
网页中如何使用SVG
CSS样式块级元素,行内元素,行内块级元素
HTML元素按布局属性可以分为三种类型:块级元素、行内元素、行内块元素 这篇文章梳理一下他们的区别与联系
用户7043603
2022/02/26
2.1K0
网页中如何使用SVG
① 如果文件中的根元素 <svg> 带有明确的 height 和 width 属性,则它们会被用作文件的固有尺寸; ② 如果只指定 height 或者 width ,并且 <svg> 带有 viewBox 属性,那么将用 viewBox 计算宽高比,图像会被缩放已匹配指定的尺寸; ③ 如果<svg> 带有 viewBox 属性而没有尺寸,则 viewBox 的 height 和 width 将被视为像素长度。 ④ 没有如何尺寸,浏览器应该为嵌入内容应用默认 HTML 尺寸,通常是 150 像素高,300 像素宽。
奋飛
2021/02/16
1.2K0
网页中如何使用SVG
如何获取元素样式
元素的style属性时常被用于获取元素样式,但很多时候它是不奏效的。看下面的代码:
跑马溜溜的球
2020/12/07
2K0

相似问题

多实体、uitableview的核心数据

10

如何在UITableView中显示核心数据实体

22

限制UITableView行中显示的核心数据实体

12

核心数据中的抽象实体和父关系(NSFetchedResultsController + UITableView)

10

从核心数据添加新实体后重新加载UITableView

213
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文