我想创建一个包含以下列的表:A1,A2,A3,L1,L2,L3,L4
此数据库的主要工作是:
用户提供一些浮点数:a,b,c,d,然后找到最小的欧几里德距离,即(a-L1)^ 2 +(b-L2)^ 2 +的最小值( C-L3)^ 2 +(d-L4)^ 2
此外,一些时间用户可能会提供A1,A2,A3,
的一些范围信息 例如,A1&gt; 0.15,2 <&lt; A2&lt; 3.5,A3 <= 1.2然后根据这些约束,搜索L1-L4。
我已经阅读了一些与此相关的主题并完成了使用MyISAM引擎将所有数据插入MySQL的测试,并使用如下命令:
select * from table1
order by (x-L1)*(x-L1)+ (y-L2)*(y-L2)+ (z-L3)*(z-L3)
limit 1
但我想尽快提高速度,我注意到有一些优化部分。但仍然不清楚如何做到这些,以及哪些适合我的情况:
答案 0 :(得分:0)
您的结果将基于特定的公式。
当您使用Mysql 5(我假设)时,您可以尝试创建procedure
并在编译之后
当你想要的时候你可以打电话,性能会优于我猜的正常选择查询。
您可以将存储过程的输入参数作为范围传递。
如果您认为结果集基于任何键,则可以使用索引。
但我真的不明白你有任何钥匙!!
Mysql和C组合第一次听到它。我不知道你将如何看到结果。(我的知识较少): - (
答案 1 :(得分:0)
如果您仍处于试验MySQL的阶段,您可能还想研究使用Postgres。
它有一堆geometry types,一个。
特别是Postgres 9.1(测试版)使用k-nearest searches实现开箱即用gist index(参见E.1.3.5.5。索引)。如果后一种实现不符合您的确切要求,您还会发现有用的是gist索引为extensible。