最高のパフォーマンスを発揮するようにインデックスを作成して、SQLクエリを最適化しようとしています。
テーブル定義
CREATE TABLE Mots (
numero INTEGER NOT NULL,
fk_dictionnaires integer(5) NOT NULL,
mot varchar(50) NOT NULL,
ponderation integer(20) NOT NULL,
drapeau varchar(1) NOT NULL,
CONSTRAINT pk_mots PRIMARY KEY(numero),
CONSTRAINT uk_dico_mot_mots UNIQUE(fk_dictionnaires, mot),
CONSTRAINT fk_mots_dictionnaires FOREIGN KEY(fk_dictionnaires) REFERENCES Dictionnaires(numero)
);
インデックスの定義
CREATE INDEX idx_dictionnaires ON mots(fk_dictionnaires DESC);
CREATE INDEX idx_mots_ponderation ON mots(ponderation);
CREATE UNIQUE INDEX idx_mots_unique ON mots(fk_dictionnaires, mot);
SQLクエリ:
SELECT numero, mot, ponderation, drapeau
FROM mots
WHERE mot LIKE 'ar%'
AND fk_dictionnaires=1
AND LENGTH(mot)>=4
ORDER BY ponderation DESC
LIMIT 5;
クエリプラン
0|0|0|SEARCH TABLE mots USING INDEX idx_dictionnaires (fk_dictionnaires=?) (~2 rows)
0|0|0|USE TEMP B-TREE FOR ORDER BY
定義されたインデックスは使用されていないようで、クエリは持続します(.timerによる):
CPU Time: user 0.078001 sys 0.015600
ただし、fk_dictionnaires=1を削除したとき。私のインデックスは正しく使用されており、パフォーマンスは約0.000000-0.01XXXXXX秒です
0|0|0|SCAN TABLE mots USING INDEX idx_mots_ponderation (~250000 rows)
私はstackoverflowでいくつかの同様の質問を見つけましたが、答えは私を助けません。
インデックスを使用したり、SQLクエリを変更したりして、パフォーマンスを向上させるにはどうすればよいですか?前もって感謝します。