Hibernate按纬度和经度进行条件查询

6

如果有一个包含超过2000万行的MySQL表格,是否有使用Hibernate构建条件来获取最接近给定纬度和经度的行的方法?

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

最后,是否可以按距离排序获取这些行?或者行数太多了?

1个回答

1
计划A:对于大量行,INDEX(lat)在性能方面是不可行的,即使限制到一个条带:AND lat BETWEEN 65 AND 69INDEX(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的增加而变慢。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接