SELECT telefono FROM agenda WHERE nombre LIKE 'Javi%' SELECT telefono FROM agenda WHERE nombre LIKE '%Sánchez'
La solución para que en ambos casos se utilicen los índices es bien sencilla, y estará en nuestra mano evaluar si se hacen el número suficiente de consultas del segundo tipo como para implementarla. Los pasos:
- Crearemos un nuevo campo en la tabla "agenda" con el nombre "nombrerev".
- Rellenamos "nombrerev" con los datos en reverse de nombre, haciendo uso de la función REVERSE, disponible tanto Oracle como SQL Server -REVERSE(nombre)- y creamos un nuevo índice en "nombrerev".
- Creamos triggers para que cuando haya INSERT o UPDATE en "nombre", nos actualice "nombrerev".
- En la aplicación, debemos realizar un pequeño ajuste, que detecte cuando se va a ejecutar una consulta con el comodín al principio: SELECT telefono FROM agenda WHERE nombre LIKE '%Sánchez', para que la cambie a SELECT telefono FROM agenda WHERE nombrerev LIKE REVERSE('%Sánchez')
Espero que os haya sido útil.