Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/02/2014, 09:52
xorow
 
Fecha de Ingreso: febrero-2010
Mensajes: 45
Antigüedad: 14 años, 9 meses
Puntos: 1
ORDER BY sobrecarga

Hola,

Estoy probando en optimizar una consulta sql y viendo que si uso el ORDER BY el tiempo que tarda en ejecutarla es mucho mayor.

La consulta es esta:

Código SQL:
Ver original
  1. SELECT HIGH_PRIORITY a.id, ... FROM articulo a WHERE a.id_categoria!=0 AND a.eliminado=0 AND a.activado=1 AND a.descartado=0 AND a.imagen!='' AND a.nombre_min!='' AND a.id_seccion=2 AND a.id_empresa=1529 ORDER BY a.fecha_actualizado DESC LIMIT 0, 60

Tarda aproximadamente: 0.1824 seg. Mientras que si quito el order by: 0.0011 seg

El campo fecha_actualizado es un timestamp y lo tengo indexado para que la consulta vaya más rápido ya que es una de las consultas más usadas en la plataforma y que tarde casi 0,2 segundos me parece un espanto pero no se como hacer que la genere más rápido.

Todos los campos de id_secc.. etc tb están indexados. En sí, he probado variando todas las condiciones quitándolas para ver si era alguna de esas y la consulta me va igual, la única variación de rendimiento es cuando añado el order by fecha_actualizado.

También queda decir que la tabla tiene aproximadamente unos 2 millones de registros.

Haciendo un explain de la consulta los valores obtenidos han sido:

id: 1
select_type: simple
table: a
type: index_merge
possible_keys: id_empresa,id_categoria,eliminado,activado,descart ado,id_seccion
key: id_empresa,id_seccion
key_len: 4, 2
ref: NULL
rows: 2072
Extra: Using intersect(id_empresa,id_seccion); Using where

Parece que mediante explain me muestra que no esa usando el index de fecha_actualizado, pero no estoy seguro.

Agradecería si alguien me pudiera echar un cable.
Un saludo.