Mysql “解释类型”;全部;。没有理由不对内部联接使用索引
我正在运行一个类似下面的查询(其中“70”是一个示例,因为我在PHP代码中使用相同的查询,只更改每个“clasificacion”的值),我想对其进行优化,所以我使用EXPLAIN: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
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优化器为什么选择计划的额外信息。