palíndromos:
Tengo la gran mesa con 5 millones de palabras. Necesito encontrar palabras que empiecen con la cadena dinámica. Pero cuando se utiliza LIKE-operador con una serie de variables, consulta se convierte en demasiado tiempo.
Por ejemplo, esta consulta tarda 1,3 segundos:
set @pattern = 'f%';
select * from words where Word like @pattern limit 100;
siguiente consulta toma 0,0 segundos:
select * from words where Word like 'f%' limit 100;
Pero ambas consultas realizan el mismo trabajo.
¿Cuál podría ser la razón por la cual las peticiones son muy diferentes en su duración? Cómo eliminar esta diferencia?
palíndromos:
Resultó que las variables tienen utf8mb4
conjunto de caracteres (juego de caracteres por defecto de mi base de datos), pero la columna Word
tiene utf8
charset.
Por lo tanto, todo lo que necesita hacer es charset convertir usando utf8
:
set @pattern = CONVERT('f%' USING utf8);
select * from words where Word like @pattern limit 100;