MySql 索引生成的列保存动态数据?

标签 mysql indexing

我正在使用 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/

相关文章:

mysql - SELECT * FROM MULTIPLE+DYNAMIC 表名

PHP插入数据

sql - SQLite:带索引列的查询中条件的执行顺序是什么?

mysql - date_format(from_unixtime()) 子选择非常慢

php - 从一个 mysql 表中获取信息并将其插入到另一个表中

php - 如何将 isAdmin() 更改为 $session->isAdmin

java - 如何使用 ProcessBuilder 执行 shell 重定向(命令 > output.txt)?

database - Oracle 数据库 : Index-Organized Table with NULL Values (in Multiple-Column Primary Key)

sql - MySql - 如果列上的索引被定义为唯一,它是否是多余的?

indexing - "blog"子域是否有助于提高主站点的网页排名?