一般に、低速の SELECT ...
WHERE
の速度を上げる必要がある場合は、まず、インデックスを追加できるかどうかをチェックします。一般に複数のテーブル間の参照はすべてインデックスを使用して実行する必要があります。EXPLAIN
コマンドを使用して、SELECT
に使用されるインデックスを判定できます。
項6.2.1. 「EXPLAIN
を使用して、クエリを最適化する」
と 項6.4.5. 「MySQLにおけるインデックスの使用」を参照してください。
MyISAM
テーブルのクエリ速度を上げる一般的なヒント。
To MySQL
によるクエリの最適化を容易にするには、関連データをロードした後にテーブルに対して
ANALYZE
TABLE
あるいはmyisamchk
--analyzeを実行する。これはインデックスのために、同じ値があるレコードの平均値を更新する(ユニークインデックスの場合、これは常に
1 になる)。MySQL はこれを使用して、2
つのテーブルを '非定数式'
で接続する際に選択するインデックスを判定する。
SHOW INDEX FROM
を実行しtbl_name
Cardinality
値を調べるとmyisamchk
--description
--verboseはインデックスの分布情報を表示する。
インデックスに従ってインデックスとデータをソートするには myisamchk --sort-index --sort-records=1(インデックス 1 でソートする場合)を使用する。速度を上げるには、すべてのレコードの読み取りにユニークインデックスを使用し、そのインデックスに従った順序で読み取りを行うように推奨される。ただし、このソートでは書き込みの最適化はできず、テーブルが大きい場合は時間がかかる。