69 mysql sql database performance sqlperformance
表现问题......
我有一个拥有地理定位数据(经度和纬度)的房屋数据库.
我想要做的是找到使用InnoDB数据库引擎将位置数据存储在我的MySQL(v5.0.24a)中的最佳方法,以便我可以执行大量查询,其中我将返回所有之间的所有主记录x1和x2 latitude
以及y1和y2 longitude
.
现在,我的数据库架构是
---------------------
Homes
---------------------
geolat - Float (10,6)
geolng - Float (10,6)
---------------------
Run Code Online (Sandbox Code Playgroud)
我的疑问是:
SELECT ...
WHERE geolat BETWEEN x1 AND x2
AND geolng BETWEEN y1 AND y2
Run Code Online (Sandbox Code Playgroud)
更新:仍然没有答案
我在下面有3个不同的答案.一个人说要用Float
.一个人说要使用INT
.一个人说要使用Spatial
.
所以我使用MySQL"EXPLAIN"语句来衡量SQL的执行速度.如果使用INT
或FLOAT
用于经度和纬度数据类型,似乎绝对没有SQL执行(结果集提取)的差异.
使用" BETWEEN
"语句似乎比使用" >
"或" <
"SQL语句要快得多.使用" BETWEEN
"比使用" >
"和" <
"语句快近3倍.
话虽如此,我仍然不知道如果使用Spatial会对性能产生什么影响,因为我不清楚它是否支持我运行的MySQL版本(v5.0.24)......以及我如何支持它如果支持.
任何帮助都会受到极大的欢迎
ric*_*ent 29
漂浮(10,6)就好了.
任何其他复杂的存储方案都需要更多的转换和转换,浮点数学运算速度非常快.
Jef*_*vis 11
我知道您在询问MySQL,但如果空间数据对您的业务很重要,您可能需要重新考虑.PostgreSQL + PostGIS也是免费软件,在高效管理空间和地理数据方面享有盛誉.许多人仅因为PostGIS而使用PostgreSQL.
我对MySQL空间系统了解不多,所以也许它对你的用例来说效果不错.
小智 6
使用除"空间"之外的任何其他数据类型的问题在于,您的"矩形选择"类型(通常,这取决于您的DBMS有多亮 - 而且MySQL当然不是最亮的)只能在一个中进行优化单一维度.
系统可以选择经度索引或纬度索引,并使用它来减少要检查的行集.但在完成之后,可以选择:(a)获取所有找到的行并扫描这些行并测试"其他维度",或者(b)在"其他维度"上执行类似的处理,然后再执行匹配这两个结果集以查看哪两行都出现.后一个选项可能无法在您的特定DBMS引擎中实现.
空间索引有点"自动"地执行后者,所以我认为可以说空间索引在任何情况下都会提供最佳性能,但也可能是它没有明显优于其他解决方案的情况,这是不值得的麻烦.这取决于各种事物,如实际数据的数量和分布等.
毫无疑问,float(树)索引必然比整数索引慢,因为浮点数执行'>'的时间通常比整数更长.但如果这种影响真的很明显,我会感到惊讶.
Google在其“商店定位器”示例中使用了float(10,6)。这足以让我接受。
同样,从MySQL 5.6.x开始,空间扩展支持要好得多,并且在功能和性能上可与PostGIS相媲美。
这实际上取决于您如何使用数据。但在对事实的严重过度简化中,十进制速度更快,但近似值不太准确。更多信息请点击这里:
http://msdn.microsoft.com/en-us/library/aa223970(SQL.80).aspx
另外,ISO 6709 中指定了 GPS 坐标的标准:
http://en.wikipedia.org/wiki/ISO_6709
归档时间: |
|
查看次数: |
77901 次 |
最近记录: |