我正在使用 mysql 地理位置查询,并且一切正常。但是,当我尝试返回以米为单位的距离(作为生成的 col),然后将其排序为最接近最远的位置时,这会占用时间。在 100k 数据集上接近 14 秒。
如上所述,distance_in_meters 是生成的 col 并且未索引。 有没有办法索引这个生成的列,即使其中的数据总是不同?为该列建立索引会有帮助吗?
最佳答案
索引在设计上是“静态的”。也就是说,如果表内部没有任何变化,则索引不需要更改。外部变化对指数没有影响。
您的任务似乎是“我在 (lat, lng);最近的 10 家咖啡店在哪里”。 (x,y) 是计算“最近”(即距离)所需的外部数据。您需要一个动态索引。所以,“不”。
该任务可以通过 INDEX(latitude)
(或经度)帮助,但这会将其从全表扫描降低到扫描数据的重要 block 。 table 。对于 100K 行来说这可能“足够好”。
如果您增长到更多行和/或您变得 I/O 受限(由于 RAM 小),那么您将需要我的 blog .
关于MySql 索引生成的列保存动态数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40998521/