Hablando de eficiencia... si usas Interbase/Firebird, y pasas la letra como parámetro de la forma:
Código SQL
[-]Select *
from tabla
where nombre like arametro
el motor no usará un indice definido sobre el nombre, sino recorerá todos los registros de la tabla. Esto es debido a que el plan se determina antes de conocer el valor del parámetro. Es mas
eficiente una clausula
starts with:
Código SQL
[-]Select *
from tabla
where nombre starts with arametro
donde el valor de
parametro debiera ser solamente 'M' (sin porcentajes).
Aqui si que se usará el indice; claro, siempre que esté definido...
Aclaro que esto es válido para Interbase. No doy fe de otros motores, salvo de Oracle, que entiendo que utilizaría el indice si el parámetro es del tipo 'M%'.
Hasta luego.