【发布时间】:2011-01-18 15:49:50
【问题描述】:
首先我不得不说我在缓存方面确实是一个菜鸟,所以请详细说明任何解释,如果我的问题很愚蠢,请多多包涵。
我有一个资源非常有限的服务器,所以我对尽可能有效地缓存数据库查询非常感兴趣。我的问题是这样的:
我有一个带有地理定位表的 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 日更新
现在我得到了一些回复,我想知道最有效的查询方式是什么。
- 具有 int 值的 Between 查询会执行得更快还是
- 使用点值进行半径计算会执行得更快吗
如果 1. 那么最佳索引会是什么样子?
【问题讨论】:
-
@Carl Manaster, @Quassnoi 您认为我的 lat/lon 列的最佳数据类型是什么?这意味着我在 lat 上使用索引或 POINT 计算搜索 BETWEEN 的查询会更快?
-
@Carl Manaster, @Quassnoi 非常感谢您就最有效的 int 索引或点计算提供意见?