6

このクエリは、指定された に最も近い要素をデカルト座標で:x提供する必要があります。:y

SELECT `type`
FROM `mapgen_centers`
ORDER BY SQRT(POW((:x - `x`), 2) + POW((:y - `y`), 2))
LIMIT 1

現在、平均で 0.002 秒かかりますが、これはもっと良くなる可能性があると感じています。特に、現在非常に頻繁に頻繁に実行しているため、スクリプトの実行全体が数分かかるためです。

これは、標準の MySQL インストールで利用可能な任意の手段 (手順、関数、インデックス、構成など) を介して最適化できますか (また、どのように最適化できるか)。

4

3 に答える 3

2

2 点間の距離を計算しているので、MySQL の空間データ型を使用できると思います。SOで役立つ質問があります。

または、上記のコメントで述べたように、事前に計算された距離の値によってインデックスを構築できます。

于 2013-08-08T14:17:44.410 に答える
1

その平方根を取り除くことを除けば、これがもっとうまくできるとは思いません。確認する必要があるのは、実行時間が実際O(n)に であることです。これは、すべての要素を少なくとも 1 回検索する必要があるためです。これは、実行時間がデータベースのテーブル サイズに比例して増加することを確認することで実行できます。したがって、100000 行のテーブルで 10 ミリ秒かかる場合、1000000 行のテーブルでは 100 ミリ秒しかかからないはずです...

于 2013-08-08T15:02:13.137 に答える