2011-02-12 57 views
0

我熟悉sql中的索引工作方式,但是对于我的理解,索引对连续变量(如纬度/经度,价格,时间等)不起作用。如何在mysql中有效地存储连续变量

我可以想到一些假设的方法,通过按范围对它们进行聚类或将它们存储排序然后对它们进行二分搜索来更快地搜索连续列。但是,我不知道sql是否支持这些方法。

  1. 我的建议方法实际上是否存在于sql?
  2. 是否有另一种更快的解决方案来存储和搜索连续变量?

回答

0

我想这取决于你想要优化的查询类型。

假设您总是希望SELECT ... ORDER BY price的表大多不变:您可以使用ALTER TABLE ... ORDER BY col来帮助为后续查询进行排序(即缩短时间)。

1

索引在连续变量上工作正常,它以与您建议的方式类似的方式实现它。索引存储在B +树中,并且树的叶子是有序的。因此,如果您执行范围查询,它们可以非常快地运行,因为它可以顺序扫描树的叶子。

有很多种方式可以告诉SQL来实现这个功能来获得性能改进,但在大多数情况下,默认情况下工作得很好。

纬度/长度是一个不同的故事,因为您正在查询两个维度。例如 您可能会要求所有商店在特定纬度/经度的100英里以内。这些类型的字段最好存储在R树中。除了B +树以外,大多数RDBMS都实现这一点。