一般に、低速の SELECT ... WHERE
の速度を上げる必要がある場合は、まず、インデックスを追加できるかどうかをチェックします。See
項5.4.3. 「MySQL でのインデックスの使用」。一般に複数のテーブル間の参照はすべてインデックスを使用して実行する必要があります。EXPLAIN
コマンドを使用して、SELECT
に使用されるインデックスを判定できます。 See
項5.2.1. 「EXPLAIN
構文(SELECT
に関する情報の取得)」。
一般的なヒント
MySQL
によるクエリの最適化を容易にするには、関連データをロードした後にテーブルに対して
myisamchk --analyze
を実行する。これはインデックスのために、同じ値があるレコードの平均値を更新する(ユニークインデックスの場合、これは常に
1 になる)。MySQL はこれを使用して、2
つのテーブルを '非定数式'
で接続する際に選択するインデックスを判定する。
SHOW INDEX FROM table_name
を実行し
Cardinality
カラムを調べると、analyze
の実行結果をチェックできる。
インデックスに従ってインデックスとデータをソートするには
myisamchk --sort-index
--sort-records=1
(インデックス 1
でソートする場合)を使用する。速度を上げるには、すべてのレコードの読み取りにユニークインデックスを使用し、そのインデックスに従った順序で読み取りを行うように推奨される。ただし、このソートでは書き込みの最適化はできず、テーブルが大きい場合は時間がかかる。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.