Inicio > MYSQL > índices

ÍNDICES

02/02/2016MYSQL

 

Un índice es un puntero a una fila de una determinada tabla de nuestra base de datos, es decir, asocia el valor de una determinada columna (o el conjunto de valores de una serie de columnas) con las filas que contienen ese valor (o valores) en las columnas que componen el puntero.
Los índices mejoran el tiempo de recuperación de los datos en las consultas realizadas contra nuestra base de datos.
Pero ojo que los índices tiene sus desventajas:

  • La creación de índices implica un aumento en el tiempo de ejecución sobre aquellas consultas de inserción, actualización y eliminación realizadas sobre los datos que afectan a el índice (ya que se tiene que actualizar).
  • Los índices ocupan espacio del almacenamiento.

Gracias al uso de índices, se reduce, de forma considreable, el tiempo de ejecución de las consultas de tipo SELECT. La mejora de dicha ejecución será mayor cuanto mayor cantidad de datos tengan las tablas de la base de datos con la que estemos trabajando. MySQL emplea los índices para encontrar las filas que contienen los valores específicos de las columnas empleadas en la consulta de una forma más rápida.MySQL usa los índices para:

  • En las condiciones WHERE de la consulta y las columnas estén indexadas.
  • Cuando se realizan consultas usando JOIN. Pero es importante que los índices sean del mismo tipo y tamaño. Por ejemplo: una operación de tipo JOIN sobre dos columnas que tengan un índice del tipo INT(10).
  • Reducir el tiempo de ejecución de las consultas con ordenación (ORDER BY) o agrupamiento (GROUP BY) si todas las columnas presentes en los criterios forman parte de un índice.
Hay diferentes tipos de índices en MySQL:
  • INDEX (NON-UNIQUE): El valor d ela columna no tiene porque ser único. Este índice se usa para mejora de rendimiento.
  • UNIQUE: El valor d ela columna tiene que ser único.
  • PRIMARY: Este tipo de índice se refiere a un índice en el que todas las columnas deben tener un valor único (al igual que en el caso del índice UNIQUE) pero con la limitación de que sólo puede existir un índice PRIMARY en cada una de las tablas.
  • FULLTEXT: Este índice se utiliza para búsquedas de texto. Este tipo de índices sólo están soportados por InnoDB y MyISAM. Puedes leer sobre este indice en este post.
  • SPATIAL: estos índices se emplean para realizar búsquedas sobre datos que componen formas geométricas representadas en el espacio. Este tipo de índices sólo están soportados por InnoDB y MyISAM
Los índices suponen una mejora en el rendimiento a la hora de obtener datos reducciendo el tiempo de ejecución de la consulta. Esta reducción de tiempo es visible sobre tablas de gran tamaño. Sobre tablas pequeñas, el uso de índices no aporta una mejora considerable de rendimiento. Así que si la tabla donde se van a crear los índices no va a crecer demasiado no es muy aconsejable crear índices sobre ella.
Muchos pensareis que porque no crear índices sobre todos los campos de todas las tablas. Pero éso supondría un problema ya que disminuiría el rendimiento en la inserción, actualización y eliminación ya que después de realizar una de estás transacciones en la base de datos se actualizan los índices, otra desventaja es que dichos índices ocupan espacio físico en disco.