Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Optimizar SQL con ORDER BY

Estas en el tema de Optimizar SQL con ORDER BY en el foro de Mysql en Foros del Web. Hola, agradecería si alguien me puede dar alguna pista sobre como podría optimizar mi base de datos, la consulta realizada o cualquier sugerencia posible para ...
  #1 (permalink)  
Antiguo 05/10/2015, 05:00
 
Fecha de Ingreso: febrero-2010
Mensajes: 45
Antigüedad: 14 años, 2 meses
Puntos: 1
Optimizar SQL con ORDER BY

Hola, agradecería si alguien me puede dar alguna pista sobre como podría optimizar mi base de datos, la consulta realizada o cualquier sugerencia posible para mejorar.

El caso es el siguiente: hay una tabla de la base de datos que contiene aproximadamente 8 millones de entradas y a la cual le realizo los SELECT directamente.

La consulta que realizo es la siguiente:

Código MySQL:
Ver original
  1. SELECT i.id_item FROM item i WHERE i.id_categoria=1 AND i.publicado=1 ORDER BY i.fecha_renovado DESC

La tabla contiene 20 campos, principalmente int , float, date y algún varchar sobre el que no realizo consultas, es solo información para mostrar al usuario.

En la base de datos tengo indexados los cuatro campos de la consulta id (PK), id_categoria (INDEX), publicado (INDEX) y fecha_renovado (INDEX). Aparte los tipos son id, id_categoria (INT) publicado (tinyint) fecha_renovado (timestamp).

Si realizo la consulta excluyendo el "ORDER BY fecha_renovado DESC", la respuesta tarda 0,0008 seg. Pero al usarla con ORDER BY tarda una barbaridad: 2,27 seg.

El resultado que me da el comando EXPLAIN cuando estoy realizando la SQL con ORDER BY es este:


id: 1
select_type: SIMPLE
table: i
type: index_merge
possible_keys: id_categoria, publicado
key: id_categoria, publicado
key_len: 2,1
ref: NULL
rows: 130395
Extra: Using intersect(id_seccion,publicado); Using where...

Si no lo interpreto mal, cuando realizo la consulta esta usando como index id_categoria y publicado, como resultado le devuelve 130.395 resultados que posteriormente tendrá que ordenar mediante el campo fecha_renovado e imagino que aquí es donde estará haciendo el tapón.

El tema es que la ordenación es obligatoria e incluso en otras ocasiones tengo que ordenar por algún otro campo (siempre un solo campo dentro de ORDER BY), ¿tengo algún modo de mejorar la estructura o la SQL para aumentar el rendimiento obteniendo el mismo resultado?

He estado leyendo información sobre vistas pero no parece que sea una solución para este problema, me sería de gran ayuda cualquier sugerencia, otro modo de organización, programar tareas...

Gracias.

Etiquetas: campo, fecha, order, select, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:49.