0

これは SO への私の最初の質問です。

このクエリの例は、テキサス州ダラスから 30 マイルの範囲内の車を検索するものです。検索する行を制限するために境界ボックスを使用しています。

問題:

クエリがキャッシュされる前に、23,600 件の結果を取得するのに約 20 秒かかります。境界ボックス内で検索できるのは 411 行だけのようです。これは本当に速いはずではありませんか?

なぜそれがとても遅いのかについてのアイデアはありますか? これを改善する方法について何か提案はありますか? 私は何か間違ったことをしていますか?

クエリ:

SELECT Make, Model 
    FROM cars 
        WHERE MBRCONTAINS( GEOMFROMTEXT( 'Polygon(( 32.4800138808 -97.1620371512, 33.0933687128 -97.1620371512, 33.0933687128 -96.4324293136, 
        32.4800138808 -96.4324293136, 32.4800138808 -97.1620371512 ))' ) ,g ) 

出力の説明:

+----+-------------+---------+-------+---------------+------+---------+------+------+------
| id | select_type | table   | type  | possible_keys | key  | key_len | ref  | rows | Extra       |
+----+-------------+---------+-------+---------------+------+---------+------+------+-----
|  1 | SIMPLE      | carscom | range | g             | g    | 34      | NULL |  411 | Using where |
+----+-------------+---------+-------+---------------+------+---------+------+------+------

このテーブルには約 120 万行あります。

関連する列とインデックスを含むテーブル構造を次に示します。実際のテーブルには、より多くの列といくつかのインデックスがあります。

CREATE TABLE IF NOT EXISTS `cars` (
  `Latitude` float(10,7) NOT NULL,
  `Longitude` float(10,7) NOT NULL,
  `Make` varchar(20) NOT NULL,
  `Model` varchar(50) NOT NULL,
  `g` geometry NOT NULL,

  KEY `LatLon` (`Latitude`,`Longitude`),
  SPATIAL KEY `g` (`g`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1;

列 に空間キーがありますg

g列にデータを入力し、空間インデックスを配置する SQL は次のとおりです。

UPDATE `cars` SET `g` = GeomFromText(CONCAT('POINT(',`Latitude`,' ',`Longitude`,')'));

ALTER TABLE `cars` ADD SPATIAL KEY `g` (`g`);

最初に 411 行だけを検索するのに時間がかかる理由がわかりません。空間列とキーに何か問題がありますか?

ご協力いただきありがとうございます。

更新: MySQL サーバーは 5.1.70 で、サーバーには 16GB のメモリがあります。また、my.cnf ファイルを編集して、skip-host-cache と skip-name-resolve を含め、MySQL サーバーを再起動しました。

更新 2、プロフィール情報:

Starting    7 µs
Checking Query Cache For Query  42 µs
Checking Permissions    2 µs
Opening Tables  8 µs
System Lock     2 µs
Table Lock  5 µs
Init    15 µs
Optimizing  5 µs
Statistics  39 µs
Preparing   13 µs
Executing   2 µs
Sending Data    163 µs
End     3 µs
Query End   1 µs
Freeing Items   15 µs
Logging Slow Query  1 µs
Cleaning Up     2 µs
4

0 に答える 0