一般に、低速の SELECT ...
WHERE
の速度を上げる必要がある場合は、まず、インデックスを追加できるかどうかを確認します。一般に複数のテーブル間の参照はすべてインデックスを使用して実行する必要があります。EXPLAIN
コマンドを使用して、SELECT
に使用されるインデックスを判定できます。項4.2.1. 「EXPLAIN
を使用して、クエリーを最適化する」、項4.4.4. 「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 でソートする場合) を使用する。速度を上げるには、すべてのレコードの読み取りに一意のインデックスを使用し、そのインデックスに従った順序で読み取りを行うように推奨される。ただし、このソートでは書き込みの最適化はできず、テーブルが大きい場合は時間がかかる。