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
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.