Ver Mensaje Individual
  #8 (permalink)  
Antiguo 18/12/2015, 05:46
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: 16 años, 5 meses
Puntos: 2658
Respuesta: Buscar un n.º dentro de un texto

Es una mala idea, y además es evidente que necesitas estudiar mucho más de SQL...
Mira, LIKE es una de las peores cláusulas que existen, y no es un comodín multiuso. El algoritmo interno de LIKE está diseñado para realizar búsquedas basadas en patrones, y NO para validar igualdades. No es lo mismo.
Usar un LIKE sin comodines (%) es un error porque obliga al parser a realizar modificaciones innecesarias en la lógica del plan de consulta.
Por su lado, LOCATE() también es una función ineficiente, que apunta a buscar un patrón dentro de una cadena, y tampoco está definida para manejar escalares (números). Esto se empeora debido a que una comparación de LOCATE obligatoriamente verificará el conjunto completo de segmentos posibles de un campo de caracteres, basado en la longitud de la cadena que se busca. El resultado de eso puede tener una performance espantosa, sin contar con su inseguridad, porque si buscases un valor como por ejemplo "35", puede devolverte aquellos que contengan, por ejemplo, 35, 135, 351, 121212235987876, o cualquier cosa así.
¿Te parece conveniente?
Obviamente es una muy mala decisión.


NO.
Yo te dije claramente que lo que debes hacer, si no quieres corregir ese error enorme de diseño en tus tablas y procesos, que lo que debes hacer es usar la función FIND_IN_SET(), para lo cual solamente tienes que acudir al manual de referencia (ver FIND_IN_SET()), donde claramente se expresa, por ejemplo, que está optimizada para aritmética de bits, lo que es fundamental porque los números se administran internamente en los DBMS como binarios, no como cadenas de texto:
Cita:
the FIND_IN_SET() function is optimized to use bit arithmetic
En resumen, si quieres seguir con ese esquema mal diseñado (no es el unico error que contiene), tendrás que usar funciones de cadena. Y estas las deberás estudiar en el manual. Pero si quieres realmente resolver tus problemas presentes o futuros, debes modificar ese esquema de bases de datos y diseñarlo bien.
Hacer esto ultimo te ahorrará muchos sufrimientos y tiempo, y te permitirá hacer consultas optimizadas, eficientes, que en el esquema actual será imposible.

Es tu decisión.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)