Mysql “解释类型”;全部;。没有理由不对内部联接使用索引

Mysql “解释类型”;全部;。没有理由不对内部联接使用索引,mysql,Mysql,我正在运行一个类似下面的查询(其中“70”是一个示例,因为我在PHP代码中使用相同的查询,只更改每个“clasificacion”的值),我想对其进行优化,所以我使用EXPLAIN: EXPLAIN SELECT TE.PK_ID_TAREA_EMPRESA AS ID_EMPRESA, TE.NOMBRE AS NOMBRE_EMPRESA, TCA.PK_ID_TAREA_CATEGORIA AS ID_CATEGORIA, TCA.NOMBRE AS NOMBRE_CATEGORIA, T

我正在运行一个类似下面的查询(其中“70”是一个示例,因为我在PHP代码中使用相同的查询,只更改每个“clasificacion”的值),我想对其进行优化,所以我使用EXPLAIN:

EXPLAIN SELECT TE.PK_ID_TAREA_EMPRESA AS ID_EMPRESA, TE.NOMBRE AS NOMBRE_EMPRESA, TCA.PK_ID_TAREA_CATEGORIA AS ID_CATEGORIA, TCA.NOMBRE AS NOMBRE_CATEGORIA, T.TIPO AS TIPO, T.CLIENTE AS CLIENTE, T.PETICION AS PETICION, T.FACTURABLE AS FACTURABLE, TCOM.COMENTARIO AS COMENTARIO, TCOM.PENDIENTE AS PENDIENTE FROM TAREA_COMENTARIO TCOM
    INNER JOIN TAREA T
    ON TCOM.TAREA_TIPO = T.TIPO
    AND TCOM.TAREA_CLIENTE = T.CLIENTE
    AND TCOM.TAREA_PETICION = T.PETICION
    INNER JOIN TAREA_EMPRESA_ TE
    ON TCOM.FK_ID_TAREA_EMPRESA = TE.PK_ID_TAREA_EMPRESA
    INNER JOIN TAREA_CATEGORIA_ TCA
    ON TCOM.FK_ID_TAREA_CATEGORIA = TCA.PK_ID_TAREA_CATEGORIA
    INNER JOIN TAREA_CLASIFICACION_ TCL
    ON TCOM.FK_ID_TAREA_CLASIFICACION = TCL.PK_ID_TAREA_CLASIFICACION
    WHERE TCOM.FK_ID_TAREA_CLASIFICACION = 70
GROUP BY TCOM.FK_ID_TAREA_EMPRESA, TCOM.FK_ID_TAREA_CATEGORIA, TCOM.FK_ID_TAREA_CLASIFICACION, TCOM.TAREA_TIPO, TCOM.TAREA_CLIENTE, TCOM.TAREA_PETICION;
请给我解释一下:

id  select_type  table   type    possible_keys                                                                      key                          key_len  ref                                               rows  Extra                                         

 1  SIMPLE       TCL     const   PRIMARY                                                                            PRIMARY                      4        const                                                1  Using index; Using temporary; Using filesort  
 1  SIMPLE       TCOM    ref     PRIMARY,FK_COMENTARIO_CLASIFICACION,FK_COMENTARIO_EMPRESA,FK_COMENTARIO_CATEGORIA  FK_COMENTARIO_CLASIFICACION  4        const                                               18                                                
 1  SIMPLE       TCA     eq_ref  PRIMARY                                                                            PRIMARY                      4        FACTURACION_WEB_DEV.TCOM.FK_ID_TAREA_CATEGORIA       1                                                
 1  SIMPLE       TE      ALL     PRIMARY                                                                            (NULL)                       (NULL)   (NULL)                                               3  Using where                                   
 1  SIMPLE       T       ref     TIPO,CLIENTE,PETICION                                                              CLIENTE                      768      FACTURACION_WEB_DEV.TCOM.TAREA_CLIENTE              76  Using where
TE(TAREA_EMPRESA_)上的“类型全部”是我无法停止的困扰,因为它没有意义。我为每个列(包括主列)都提供了索引,所以我不知道为什么在连接两个表时不使用索引

这是我在TE上得到的:

栏目:

索引:

有什么想法吗?提前谢谢

编辑: TAREA_EMPRESA_uu包含以下内容:

PK_ID_TAREA_EMPRESA  NOMBRE                ORDEN  FECHA_BAJA  

              1  CR ENERGIA                3        (NULL)
              2  SPAIRAL COMMERCE          2        (NULL)
              3  KNET COMUNICACIONES       4        (NULL)
              4  IR SOLUCIONES             1        (NULL)

TAREA\u EMPRESA
是否包含几行?看起来你也在通过“feature”@RaymondNijland滥用MySQL组是的,它包含以下内容:(编辑问题)MySQL planner/optimzer是基于成本的,并计算出使用索引时,一次完整扫描(一次随机磁盘i/o)比4次随机磁盘i/o更快。。所以不用担心,在这种情况下,优化器做得很好。@RaymondNijland谢谢你的帮助,Raymond!其他提示如果您使用的是MySQL 5.6+,那么您可以使用
EXPLAIN FORMAT=JSON
获取更多信息,同时还可以显示执行成本。此外,MySQL 5.6+还包含一个优化器跟踪(),它还提供了有关MySQL优化器为什么选择计划的额外信息。