Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/02/2013, 10:45
Avatar de SUSMO
SUSMO
 
Fecha de Ingreso: abril-2008
Ubicación: Barcelona
Mensajes: 188
Antigüedad: 16 años, 1 mes
Puntos: 0
Optimizar consulta con explain

Hola a tod@s,

Estoy intentando optimizar mis consultas a bdd, para ello he leído que una buena forma de saber que hacer es utilizando el Explain, lo he utilizado pero no se donde tengo el fallo.

Código MySQL:
Ver original
  1. EXPLAIN SELECT listM.prtx__ref, listM.value
  2. FROM prtx_list_m AS listM
  3. INNER JOIN prtx__comentssubs AS typex  ON typex.ref = listM.prtx__ref AND typex.public = 1
  4. INNER JOIN prtx_prt_prc AS cat ON cat.prtx__ref = typex.ref AND cat.prt__name = 'comentssubs'
  5. AND cat.prc__id in ('680','533','3','20')
  6. WHERE listM.prt__name = 'comentssubs' AND listM.prtc__col_name = 'llmult'

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE typex ALL PRIMARY NULL NULL NULL 3 Using where; Using temporary; Using filesort
1 SIMPLE cat ref PRIMARY PRIMARY 152 typex.ref 1 Using where; Using index
1 SIMPLE listM ref PRIMARY,Index_2 Index_2 214 typex.ref,const 6 Using where

Por lo que he leído, es como si no tubiera un índice asociado a la tabla prtx__comentssubs, pero eso no es cierto ya que el campo ref es la primary key de mi tabla. Por otro lado la tabla prtx_list_m tiene como clave primaria compuesta: prtx__ref, prtc__col_name, prt__name, value y como índice: prtx__ref, prt__name. La tabla prtx_prt_prc tiene como primary key compuesta: prtx__ref, prc__id, prt__name.

Alguien podria decirme como podría optimizar esta consulta? estoy desesperada, he provado diferentes combinaciones de la query y todas me devuelven lo mismo en el explain.

Aprovecho para hacer otra pregunta, que es más rápido: cat.prc__id in ('680','533','3','20') o cat.prc__id = '680' or cat.prc__id ='533' or cat.prc__id ='3' or cat.prc__id ='20' ?
__________________
Perdida en el mundo del conocimiento