gpt4 book ai didi

java - 按纬度和经度的 hibernate 条件

转载 作者:可可西里 更新时间:2023-11-01 06:51:02 25 4
gpt4 key购买 nike

有一个包含超过 2000 万行的 MySQL 表,Hibernate 是否有某种方法可以建立一个标准,以便在给定经纬度的情况下获得最近的行?

使用 Criteria 会很棒,因为我需要使用更多过滤器(价格、类别等)。

最后,是否可以让行按距离排序?还是行数太多?

最佳答案

计划 A 有大量的行,INDEX(lat) 是一个非启动器,在性能方面,即使限制为条纹:纬度在 65 和 69 之间INDEX(lat, lng) 并没有更好,因为优化器会不要同时使用两列,即使使用 AND lng BETWEEN...

B 计划 您的下一个选择将涉及 lat 和 lng,以及一个子查询。5.6 版将是有益的。有点像这(包括 INDEX(lat, lng, id) 之后):

SELECT ... FROM (
SELECT id FROM tbl
WHERE lat BETWEEN...
AND lng BETWEEN... ) x
JOIN tbl USING (id)
WHERE ...;

由于各种原因,B 方案仅比 A 方案略好。

C 计划 如果有数百万行,您将需要 my pizza parlor algorithm .这涉及到一个存储过程来反复探测表,寻找足够的行。它还涉及分区以获得粗略的 2D 索引。该链接包含引用代码,其中包括对类别等内容的过滤。

计划A和B是O(sqrt(N));计划 C 是 O(1)。也就是说,对于计划 A 和 B,如果将行数增加四倍,你花费的时间加倍。 C计划没有得到N 越大越慢。

关于java - 按纬度和经度的 hibernate 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30194324/

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