私は、点から点までの距離に近似的に一致する行を見つけることができます。それは動作しますが、インデックスを使用しません。Mysql Spatial index unused
私はこのテーブルの空間インデックスを利用しようとしていますが、使用されていないようです(説明コマンドは "possible_keys" = null)。
- のMySQL 5.7.17
テーブル:
CREATE TABLE `geoDirections` ( `id` int(11) NOT NULL, `from` point NOT NULL, `to` point NOT NULL, ) ENGINE=InnoDB; ALTER TABLE `geoDirections` ADD PRIMARY KEY (`id`), ADD SPATIAL KEY `from` (`from`), ADD SPATIAL KEY `to` (`to`);
- arroundの
1000000行私が試した何
挿入:以下で
使用ST_Contains
EXPLAIN SELECT g.`from` FROM geoDirections g WHERE ST_Contains(ST_Buffer( ST_GeomFromText('POINT(-2.00751 48.6547)', 4326), (0.00001*20)), g.`from`) = 1 AND ST_Contains(ST_Buffer( ST_GeomFromText('POINT(-2.05757 48.6338)', 4326), (0.00001*20)), g.`to`) = 1
は、算出した距離を使用して私に
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
| 1 | SIMPLE | g | null | ALL | null | null | null | null | 994867 | 100.00 | Using where |
を与える
EXPLAIN SELECT X(g.`from`),Y(g.`from`), g.*, ( 6373 * acos ( cos (radians(-2.00751)) * cos(radians(X(g.`from`))) * cos(radians(Y(g.`from`)) - radians(48.6547 )) + sin (radians(-2.00751)) * sin(radians(X(g.`from`))) ) ) AS distanceFrom FROM geoDirections g HAVING distanceFrom < 0.02
は私に
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
| 1 | SIMPLE | g | null | ALL | null | null | null | null | 994867 | 100.00 | Using where |
-
を与えてくれ
EXPLAIN SELECT
X(g.`from`),Y(g.`from`), g.*
FROM geoDirections g
WHERE X(g.`from`) = -2.00751
のような単純な
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
| 1 | SIMPLE | g | null | ALL | null | null | null | null | 994867 | 100.00 | null |
でも何かを与えます
私は何をしないのです(空間インデックスをサポートすることになっwheren't古いInnoDBのバージョンとして)
私の[_code_](http://mysql.rjweb.org/doc.php/latlng)修正後にそれを打つかどううーん...私は疑問に思います。 –