Ver Mensaje Individual
  #2 (permalink)  
Antiguo 14/03/2014, 15:08
Avatar de gnzsoloyo
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)