sábado, 19 de julio de 2008

La importancia de los índices en MySQL

Los índices en una base de datos se usan para encontrar filas con valores específicos en ciertas columnas rápidamente. Si no tenemos un índice, el servidor tiene que buscar desde el primer registro hasta el último, recorriendo toda la tabla para encontrar las filas que necesitamos.

Cuanto más grande la tabla, más tarda. Si tenemos un índice para la columna que estamos consultando (en where columna=algo) el MySQL puede encontrar el registro rápidamente sin tener que recorrer toda la tabla.

Veamos un ejemplo:

Tengo esta tabla de Ventas, con la sgte. estructura:

+----------+----------------------+
| sucursal | smallint(5) unsigned |
| fecha    | date                 |
| producto | int(10) unsigned     |
| precio   | decimal(10,3)        |
| vtadia   | decimal(10,3)        |
+----------+----------------------+

La tabla tiene unos 350.000 registros, y quiero sacar unas estadísticas de ventas de un cierto período para una sucursal en particular. El proceso que debo utilizar requiere que ejecute unas 200 consultas, dependiendo del período y de la sucursal.

Este fue el resultado antes de crear el índice:

Sucursal 1 - Enero 2008

Inicio: 2008-07-19 11:22:38
Fin: 2008-07-19 11:25:15
218 consultas enviadas a MySQL Server.

Ahora vamos a crear un indice para la columna producto (que es la base de mis estadísticas):

mysql> create index idx_vtadia_prod on vta_del_dia (producto);

Y este es el nuevo resultado:

Sucursal 1 - Enero 2008

Inicio: 2008-07-19 11:44:48
Fin: 2008-07-19 11:44:51
218 consultas enviadas a MySQL Server.

Interesante no ?

No hay comentarios.: