2011-02-12 39 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都實現這一點。