gpt4 book ai didi

sql - 非平凡的地理位置查询数据库缓存

转载 作者:行者123 更新时间:2023-11-29 04:57:58 25 4
gpt4 key购买 nike

我首先要说的是,我真的是缓存方面的菜鸟,所以请详细说明任何解释,如果我的问题很愚蠢,请多多包涵。

我有一台资源非常有限的服务器,所以我真的很想尽可能有效地缓存数据库查询。我的问题是:

我有一个带有地理位置表的 MYSQL 数据库,有列(lat 和 lng)- 我只索引了 lat,因为查询总是同时具有 lat 和 lng,并且只有 1 个索引可以有效地用于我的理解( ?)。

查询在坐标上非常交替

select lat, lng 
where lat BETWEEN 123123123 AND 312412312 AND lng BETWEEN 235124231 AND 34123124

作为 BETWEEN 查询边界的长数字不断变化,所以有没有办法以智能方式缓存它,这样缓存就不必是完整的查询匹配,但可以针对新的查询保留先前查询之间的值以节省一些数据库资源?

我希望你能理解我的问题 - 如果没有请问。

非常感谢

2011 年 1 月 24 日更新

现在我已经得到了一些响应,我想知道最有效的查询方式是什么。

  1. 具有 int 值的 Between 查询执行得更快还是
  2. 用点值计算半径会更快吗

如果 1. 那么最优索引会是什么样子?

最佳答案

如果你的表是 MyISAM,你可以使用 Point 数据类型(更多细节参见 this answer)

如果您不愿意或不能使用空间索引,您应该使用两个单独的索引:

CREATE INDEX ix_mytable_lat_lon ON mytable (lat, lon)
CREATE INDEX ix_mytable_lon_lat ON mytable (lon, lat)

在这种情况下,MySQL 可以对这些索引使用 index_intersect,这有时比仅使用单个索引进行过滤更快。

即使没有,如果有两个索引,它也可以选择一个更具选择性的索引。

至于缓存,所有从索引读取的页面都被缓存并驻留在内存中,直到它们被更热的数据覆盖(并不是所有的数据库都适合缓存)。

这将阻止 MySQL 从磁盘读取数据。

MySQL 还能够将整个结果集缓存在内存中,但是,这需要逐字重复查询,所有参数都完全相同。

关于sql - 非平凡的地理位置查询数据库缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4726042/

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