0

私はこれを理解していません。テーブルを削除して何度も再作成しましたが、毎回同じです。このクエリを実行すると:

SELECT * FROM `squares` WHERE MBRContains(PolyFromText('Polygon((-34 166, -34 171, -41 171, -41 166, -34 166))'), `coordinate`);

250,000 を超える結果が返されましたが、これは正しいです。where句に基づいてこれを削除するようにクエリを変更しようとすると、次のようになります。

DELETE FROM `squares` WHERE MBRContains(PolyFromText('Polygon((-34 166, -34 171, -41 171, -41 166, -34 166))'), `coordinate`);

MySQL では、一度に 1 つの行のみを削除するのが適切であると考えています。「Go」を 25 万回以上クリックするつもりはありません。どうしてこれなの?これがテーブル構造です...

`squares` (
   `square_id` int(7) unsigned NOT NULL,
   `ref_coord_lat` double(8,6) NOT NULL,
   `ref_coord_long` double(9,6) NOT NULL,
   `coordinate` point NOT NULL,
   PRIMARY KEY (`square_id`),
   KEY `ref_coord_lat` (`ref_coord_lat`),
   KEY `ref_coord_long` (`ref_coord_long`),
   SPATIAL `coordinate` (`coordinate`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

使用する場合、これは phpMyAdmin 3.5.2.2 で実行されている MySQL 5.5.27 です。何か案は?

4

2 に答える 2

0

テーブルの正方形を最適化してみてください。

編集:または制限を追加します:

DELETE FROM `squares` WHERE MBRContains(PolyFromText('Polygon((-42 175, -42 179, -48 179,     -48 175, -42 175))'), `coordinate`) LIMIT 10000;

可能であれば limit パラメータで遊んでください。

于 2013-08-18T21:42:55.163 に答える