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

[SOLUCIONADO] Optimizar consulta

Estas en el tema de Optimizar consulta en el foro de Mysql en Foros del Web. Buenas a todos. Queria saber como podria mejorar la siguiente consulta, ya que he estado probando a crear algunos indices y leyendo pero no optengo ...
  #1 (permalink)  
Antiguo 12/08/2014, 13:04
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Optimizar consulta

Buenas a todos.

Queria saber como podria mejorar la siguiente consulta, ya que he estado probando a crear algunos indices y leyendo pero no optengo muchas mejorias, no se se hay una mejor forma de plantear la consulta.

Código MySQL:
Ver original
  1.  
  2. SELECT nombre, apellidos, id, CONCAT( nombre, ' ', apellidos ) AS nombre_apellidos
  3. FROM ficha_cliente
  4. ) AS nombre2
  5. WHERE id !=1
  6. AND (nombre_a LIKE '%texto%' OR apellidos LIKE 'texto%') ORDER BY nombre_apellidos

Utilizando EXPLAIN me muestra lo siguiente:

Código HTML:
Ver original
  1. ***********************************************************************************************************************
  2. * id* select_type *  table        * type * possible_keys * key   * key_len    * ref * rows * Extra
  3. * 1 * PRIMARY     * <derived2>    * ALL  * NULL          * NULL  * NULL       * NULL* 213  * Using where; Using filesort
  4. * 2 * DERIVED     * ficha_cliente * ALL  * NULL          * NULL  * NULL       * NULL* 213  *                          *
  5. ***********************************************************************************************************************
  #2 (permalink)  
Antiguo 12/08/2014, 13:35
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Optimizar consulta

Probemos:
Código MySQL:
Ver original
  1.   SELECT nombre, apellidos, id, CONCAT( nombre, ' ', apellidos ) AS nombre_apellidos
  2.   FROM ficha_cliente
  3.   WHERE id !=1
  4.   AND (nombre_a LIKE '%texto%' OR apellidos LIKE 'texto%')
  5. ) AS nombre2
  6. ORDER BY nombre_apellidos
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 12/08/2014, 15:59
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: Optimizar consulta

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Probemos:
Código MySQL:
Ver original
  1.   SELECT nombre, apellidos, id, CONCAT( nombre, ' ', apellidos ) AS nombre_apellidos
  2.   FROM ficha_cliente
  3.   WHERE id !=1
  4.   AND (nombre_apellidos LIKE '%texto%' OR id LIKE 'texto%')
  5. ) AS nombre2
  6. ORDER BY nombre_apellidos
Gracias por la respuesta pero esa construcion de la consulta no es valida.


en la tabla tengo los siguientes campos:
-------------------
id
nombre
apellidos
otros campos.
--------------------

La idea es unir nombre y apellidos en un campo para poder buscar una cadena dentro de esa union de campos y/o por id, no se si me explico.


Siguiendo tu proposicion he contruido la siguiente consulta:

Código SQL:
Ver original
  1. SELECT *
  2.     FROM (
  3.     SELECT nombre, apellidos, id, CONCAT( nombre, ' ', apellidos ) AS nombre_apellidos
  4.     FROM ficha_cliente WHERE id !=1
  5.     ) AS nombre2
  6.   WHERE
  7.   (nombre_apellidos LIKE '%m%' OR id LIKE 'ale%') ORDER BY nombre_apellidos

Los tiempos mejoran bastante, aun asi me sigue diciendo con el explain , Using where; Using filesort; , indicando que la consulta debe/puede ser mejorada optimizada.

He probado a crear un indice compuesto por el nombre y apellidos, y forzar el uso del indice mediante FORCE INDEX o USE INDEX, pero entre usar o forzar el indice y no usarlo no se aprecian diferencias.

La tabla actualmente tiene 1500 registros aprox, no se si con este volumen de registros entre usar o no indice puede ser irrelevante y de ahi que no se aprecie diferencia.

Seguire investigando, igualmente si teneis alguna sugerencia lo agradezco.

Última edición por xerifandtomas; 12/08/2014 a las 16:42

Etiquetas: select
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 08:32.