select子句中的MySQL非索引列

select子句中的MySQL非索引列,mysql,Mysql,当我在select子句中同时有主键列和非主键列时,请按如下所示解释Extra shows empty下的输出: 查询: 在上面的查询c_id中,uid列是主键的一部分,而rating、name不是主键的一部分。 如果我从select子句中删除非主键,则查询使用的索引如下: EXPLAIN SELECT aggEI.c_id AS companyId, aggEI.c_id AS uuid FROM AGG_EXTERNALINDIVIDUAL AS

当我在select子句中同时有主键列和非主键列时,请按如下所示解释Extra shows empty下的输出: 查询:

在上面的查询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;
对于唯一索引(包括PK),解释不会显示在
Extra
列“使用索引”,但这并不意味着它不使用索引。。。事实上,为了确保使用索引,您需要检查指定使用什么索引的
列,如果该列为空,则实际上不使用索引


您可以从中看到结果。

判断解释输出时,两个查询都使用索引…@Stephan虽然两个查询的行数相同,但为什么额外的列不同。。。。一个是空的,另一个是“使用索引”显示
CREATE TABLE
语句。@ypercube请在editnp中找到CREATE TABLE,检查fiddle以查看示例
          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;