select句に主キー列と非主キー列の両方がある場合、Extraの下のEXPLAIN出力は以下のように空と表示されます:クエリ:
EXPLAIN SELECT aggEI.c_id AS companyId,aggEI.uid AS uuid,
aggEI.rating AS rating, aggEI.ei_name AS name
FROM AGG_EI AS aggEI
where aggEI.c_id in (8)
1 SIMPLE aggEI ref agg_ei_comdm_fk_idx agg_ei_comdm_fk_idx 8 const 65909
上記のクエリでは、c_id,uid 列は主キーの一部であり、rating,name は主キーの一部ではありません。select句クエリから非主キーを削除すると、以下のようにインデックスが使用されます。
EXPLAIN SELECT aggEI.c_id AS companyId,
aggEI.c_id AS uuid
FROM AGG_EXTERNALINDIVIDUAL AS aggEI
where aggEI.c_id in (8)
1 SIMPLE aggEI ref agg_ei_comdm_fk_idx agg_ei_comdm_fk_idx 8 const 65909 Using index
agg_ei_comdm_fk_idx は、列 c_id の外部キー インデックスです。誰かが私にこの振る舞いを説明できますか。クエリにインデックスを使用させるには、どのインデックスの組み合わせが必要ですか
テーブルの作成:
CREATE TABLE IF NOT EXISTS `AGG_EI` (
`c_id` BIGINT NOT NULL ,
`uid` VARCHAR(150) NOT NULL ,
`ei_name` VARCHAR(150) NOT NULL ,
`rating` DOUBLE NULL ,
`cnt` DOUBLE NULL ,
PRIMARY KEY ( `c_id`, `uid`) ,
INDEX `agg_ei_comdm_fk_idx` (`c_id` ASC) ,
UNIQUE INDEX `id_UNIQUE` ( `c_id` ASC, `uid` ASC) ,
CONSTRAINT `agg_ei_comdm_fk`
FOREIGN KEY (`c_id` )
REFERENCES `COMPDM` (`c_id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION
ENGINE = InnoDB;