3

在庫データベースをアップグレードしていて、クエリを高速化したいと考えています。並べ替えの大部分は、それぞれが範囲である 2 つの列にあります。例えば。

SELECT ....
WHERE price BETWEEN 10.50 AND 34.20 
AND date BETWEEN 1311264060 AND 1313942460
ORDER BY stockNo LIMIT 100

範囲が使用されているため、MySQL は 1 つの列のインデックスしか使用できないことを理解しています。つまり、インデックスを使用して価格帯に一致するレコードを抽出できますが、日付範囲に一致するレコードを見つけるためにテーブル スキャンに頼る必要があります。

価格とデータが x 軸と y 軸であるふりをして、空間データの列を埋め、MySQL の空間検索と R-TREE インデックスを利用してデータを抽出するというアイデアがありました。

R-TREESの経験者はいますか?これにより、速度が向上する可能性はありますか?

4

1 に答える 1

2

R ツリーは、地理座標など、ディメンションが同様の意味を持ち、範囲クエリなどのウィンドウ クエリを実行するデータに最適です。

データにはおそらく、R ツリーに害を及ぼす可能性のあるいくつかの影響があります。たとえば、価格には多数の離散値しかなく、日付範囲はまったく異なるスケールではありません。「ボリューム」や「面積」などの多くの R ツリー最適化戦略は、実際に価格差と時間差の積を計算する場合、あまり意味がありません。

ただし、R ツリーは引き続き機能する可能性があります。しかし、おそらく kB ツリーや同様の分割ツリーを使用したほうがよいでしょう。MySQL にそのような機能があるかどうかはわかりませんが、私はそうは思いません (通常、すべての高度な機能が欠けています)。

于 2011-11-25T22:06:05.860 に答える