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

Acelerar consulta en MySQL

Estas en el tema de Acelerar consulta en MySQL en el foro de Mysql en Foros del Web. Formulo de nuevo esta pregunta por que la verdad el otro medio que es mas cosa de VB6. http://www.forosdelweb.com/f69/acele...acion-1094147/ Si hago todo esto de mysql ...
  #1 (permalink)  
Antiguo 14/03/2014, 11:37
Avatar de arielenter  
Fecha de Ingreso: abril-2009
Mensajes: 75
Antigüedad: 15 años, 7 meses
Puntos: 2
Pregunta Acelerar consulta en MySQL

Formulo de nuevo esta pregunta por que la verdad el otro medio que es mas cosa de VB6.
http://www.forosdelweb.com/f69/acele...acion-1094147/

Si hago todo esto de mysql lo mismo tarda tambien.
Tengo la misma tabla siempre de 7.000 Registros.
Este (captura de pantalla)


Como se ve arriva tiene 4 campos si ejecuto esta consulta.
Código MySQL:
Ver original
  1. UPDATE bingo75 SET aciertos=aciertos+1 WHERE matriz LIKE '%01%' AND habilitado = 'SI'

Esto en mi Pc va super rapido.

Ahora lo que hago es dividir por seccion la matriz asi: (captura de pantalla)

Al ejecutar esta consulta solo en la columna "LB" tarda lo mismo en mi PC, y en la otra pc con menos capacidad tarda como 2 0 3 segundos.

Código MySQL:
Ver original
  1. UPDATE bingo75 SET aciertos=aciertos+1 WHERE lb LIKE '%01%' AND estado='SI'

Lo que quiero entender es si yo tengo 7.000 registro y lo divido el en columnas el campo matriz no acelerara en nada eso?
__________________
www.enterpy.net
  #2 (permalink)  
Antiguo 14/03/2014, 15:08
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Acelerar consulta en MySQL

No se va a acelerar jamás, en tanto uses LIKE... Es una de las peores cláusulas, destructoras de performance cuando la usas con comodines en ambos lados de la palabra:
Código MySQL:
Ver original
  1. LIKE '%palabrabsucada%'
Y esto sucede porque le estás diciendo que busque lo que comience con cualquier cosa y termine con cualquier cosa.
¿Y cómo logra encontrar eso?
Simple: debe forzosamente leer toda la tabla y todos y cada uno de los registros. Es lo que se llama "full table scan", y se considera el peor escenario de una consulta, junto con el producto cartesiano.

¿Una solución?
Bueno, es un caso difícil, porque estás trabajando en BBDD con una matriz, en forma de VARCHAR... La verdad no estoy seguro de por donde empezar.
Yo lo plantearía de dos formas:
1) Si puedes separar todos los valores en columnas individuales, podrías usar FIELD() para el WHERE
Código MySQL:
Ver original
  1. UPDATE bingo75
  2. SET aciertos=aciertos+1
  3. WHERE FIELD(lb, c1, c2, c3, c4, c5, c6, ...cN)>0'

2) Si en lugar de usar asteriscos, usaras comas para separarlos, podrías usar FIND_IN_SET():
Código MySQL:
Ver original
  1. UPDATE bingo75
  2. SET aciertos=aciertos+1
  3. WHERE FIND_IN_SET(lb, matriz)>0'

También podrías usar INSTR() o LOCATE(), por ejemplo, pero son un poco menos eficientes para este caso.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: acelerar, campo, registro, 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 04:52.