1

次の表があります。

 CREATE TABLE numbert_t ( v DOUBLE , id INTEGER, INDEX(v) ) 

そして、距離 abs( q - v ) でポイントをソートするパラメーター q を使用してクエリを実行したいと考えています。例えば

 SELECT v, id, ABS( q - v ) AS d FROM number_t ORDER BY d 

上記のクエリとこれを試しました:

 SELECT v, id, (v - q) AS d FROM numbers_t WHERE (v - q) > 0
 ORDER BY d

上記のわずかなバリエーションも試しました:

 SELECT v, id, (v - q) AS d FROM numbers_t WHERE v > q ORDER BY v 

それらは同等ではありませんが、2 つのクエリを実行し、2 つの独立したカーソルを持つことは気にしません。ただし、すべての場合において、EXPLAIN は filesort を示し、インデックスは使用されません。この問題に対して、MySQL に何らかの方法でインデックスを使用させることはできますか?

4

2 に答える 2

1

空間拡張とポイント データ型を使用できます。次に、ポイントが境界ボックス内にある場合などに、近接検索を使用できます。私の quadkey ライブラリを使用することもできます。ヒルベルト曲線とメルカトル図法を使用します。私の php クラスのヒルベルト曲線は、@ phpclasses.org からダウンロードできます。

于 2013-10-13T15:40:44.803 に答える