我正在尝试通过创建索引来优化 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 查询来提高性能?提前致谢。