0

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;
4

1 に答える 1

0

一意のインデックス (PK を含む) の場合、説明はExtra「インデックスの使用」列に表示されませんが、それはそれを使用していないことを意味します...実際、インデックスが使用されていることを確認するには、keyどのインデックスを指定する列を確認する必要がありますuse です。これが空白の場合、実際にはインデックスは使用されません。

このfiddleで結果を確認できます。

于 2013-05-23T07:51:21.593 に答える