如何在mysql中有效地存储连续变量

时间:2011-02-12 16:00:31

标签: sql mysql optimization indexing query-optimization

我对索引在sql中的工作方式很熟悉,但据我所知,索引与连续变量(如纬度/经度,价格,时间等)不兼容。

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

  1. 我提出的方法确实存在于sql中吗?
  2. 还有另一种更快的存储和搜索连续变量的解决方案吗?

2 个答案:

答案 0 :(得分:1)

索引在连续变量上运行良好,它以与您的建议类似的方式实现它。索引存储在B +树中,树的叶子按顺序排列。因此,如果您进行范围查询,它们会非常快速地运行,因为它可以按顺序扫描树的叶子。

您可以通过多种方式告诉SQL实现此功能以获得性能改进,但默认情况下在大多数情况下都可以正常工作。

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

答案 1 :(得分:0)

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

假设您总是希望SELECT ... ORDER BY price一个大致不变的表:您可以使用ALTER TABLE ... ORDER BY col帮助后续查询排序(即减少时间)。