en sql no existe tal cosa como seleccionar un indice.
solo es necesario que nosotros determinemos que indices crear para una tabla segun nuestros analisis, una vez hecho esto, nos olvidamos de los indices.
es el propio motor quien se encarga de seleccionar los indices necesarios para buscar la información de un select o un update.
a esto se le llama plan.
por ejemplo:
- Code: Select all Expand view RUN
select num_clie, nombre, cedula from clientes where num_clie=100
aca vemos que la clave de busqueda es la columna "num_clie", entonces es necesario que nosotros creemos un indices en la tabla cliente por la columna "num_clien".
si el indice existe, al motor sql le
tomara 1 fila encontrar la información solicitada del cliente numero 100, pero si no hay indice por esa columna, entonces el motor necesitara recorrer la totalidad de las filas de la tabla clientes para retornar una sola fila.
aca algo que señalar es que en este caso en necesario que el indice sea "unique" por que el numero de un cliente debe ser unico.
y si queremos optimizar un poco mas la cosa se podría usar:
- Code: Select all Expand view RUN
select num_clie, nombre, cedula from clientes where num_clie=100 limit 1
con "limit 1" le informamos tajante mente al motor que nuestro resultado es de una sola fila, por lo que no es necesario que busque mas.
por norma general, toda columna involucrada en un where, order by o group by debe tener un indice
un dato importante es que en mysql tenemos una herramienta muy importante "describe":
si nosotros indicamos:
- Code: Select all Expand view RUN
describe select num_clie, nombre, cédula from clientes where num_clie=100 limit 1
aca pones "describe" antes de una consulta, entonces ocurre que el select en cuestión no retornara las filas solicitadas, si no que el select retornara la info de como el motor sql busco la información que le solicitamos.
no informa, que tabla uso, la llave de indice que utilizo para la búsqueda, asi como cuantas filas tubo que procesar para encontrar la informacion solicitada.
todos, esos tips lo he encontrado en este blog, que si bien trata de firebirdsql, la teoría es aplicable a cualquier motor sql, ademas que walter se las pinta para encontrar y explicar información.
http://firebird21.wordpress.com/se las recomiendo.
he aprendido un montón de trucos y optimizaciones.