Performance - script

From Ibbddunq

(Difference between revisions)
Line 1: Line 1:
= Indices =
= Indices =
-
Un í­ndice (o KEY, o INDEX) es un grupo de datos que MySQL asocia con una o varias columnas de la tabla. En este grupo de datos aparece la relaciÃ�³n entre el contenido y el nÃ�ºmero de fila donde estÃ�¡ ubicado.
+
Un í­ndice (o KEY, o INDEX) es un grupo de datos que MySQL asocia con una o varias columnas de la tabla. En este grupo de datos aparece la relación entre el contenido y el número de fila donde está ubicado.
-
Los �­ndices -como los �­ndices de los libros- sirven para agilizar las consultas a las tablas, evitando que mysql tenga que revisar todos los datos disponibles para devolver el resultado.
+
Los índices -como los índices de los libros- sirven para agilizar las consultas a las tablas, evitando que mysql tenga que revisar todos los datos disponibles para devolver el resultado.
-
Podemos crear el �­ndice a la vez que creamos la tabla, usando la palabra INDEX seguida del nombre del �­ndice a crear y columnas a indexar (que pueden ser varias):
+
Podemos crear el índice a la vez que creamos la tabla, usando la palabra INDEX seguida del nombre del índice a crear y columnas a indexar (que pueden ser varias):
INDEX nombre_indice (columna_indexada, columna_indexada2...)
INDEX nombre_indice (columna_indexada, columna_indexada2...)
-
La sintaxis es ligeramente distinta segun la clase de �­ndice:
+
La sintaxis es ligeramente distinta segun la clase de índice:
  PRIMARY KEY (nombre_columna_1 [,nombre_columna2...])
  PRIMARY KEY (nombre_columna_1 [,nombre_columna2...])
Line 14: Line 14:
  INDEX nombre_index (columna_indexada1 [,columna_indexada2...])  
  INDEX nombre_index (columna_indexada1 [,columna_indexada2...])  
-
Podemos tambi�©n a�±adirlos a una tabla despu�©s de creada:
+
Podemos también añadirlos a una tabla despuÃ�©s de creada:
  ALTER TABLE nombre_tabla ADD INDEX nombre_indice (columna_indexada);
  ALTER TABLE nombre_tabla ADD INDEX nombre_indice (columna_indexada);

Revision as of 13:18, 8 June 2009

Contents

Indices

Un í­ndice (o KEY, o INDEX) es un grupo de datos que MySQL asocia con una o varias columnas de la tabla. En este grupo de datos aparece la relación entre el contenido y el número de fila donde está ubicado.

Los índices -como los índices de los libros- sirven para agilizar las consultas a las tablas, evitando que mysql tenga que revisar todos los datos disponibles para devolver el resultado.

Podemos crear el índice a la vez que creamos la tabla, usando la palabra INDEX seguida del nombre del índice a crear y columnas a indexar (que pueden ser varias): INDEX nombre_indice (columna_indexada, columna_indexada2...)

La sintaxis es ligeramente distinta segun la clase de índice:

PRIMARY KEY (nombre_columna_1 [,nombre_columna2...])
UNIQUE INDEX nombre_indice (columna_indexada1 [,columna_indexada2 ...])
INDEX nombre_index (columna_indexada1 [,columna_indexada2...]) 

Podemos también añadirlos a una tabla despuÃ�©s de creada:

ALTER TABLE nombre_tabla ADD INDEX nombre_indice (columna_indexada);

Los �­ndices permiten mayor r�¡pidez en la ejecuci�³n de las consultas a la base de datos tipo SELECT ... WHERE

La regla b�¡sica es crear �­ndices sobre aquellas columnas que se usen en una cl�¡usula WHERE. Pero existen varias reglas donde el uso de un �­ndice podr�­a afectar directamente a la performance de una consulta (Group BY, Order BY)

Otra regla b�¡sica es que son mejores candidatas a indexar aquellas columnas que presentan muchos valores distintos, mientras que no son buenas candidatas las que tienen muchos valores id�©nticos, como por ejemplo sexo (masculino y femenino) porque cada consulta implicar�¡ siempre recorrer practicamente la mitad del indice.

Diferentes tipos de indices

En algunas bases de datos existen diferencias entre KEY e INDEX ( no as�­ en MySQL donde son sin�³nimos)

  • Un Ã�­ndice que sÃ�­ es especial es el llamado PRIMARY KEY. Se trata de un Ã�­ndice diseÃ�±ado para consultas especialmente rÃ�¡pidas. Todos sus campos deben ser UNICOS y no admite NULL
  • Un indice UNIQUE es aquel que no permite almacenar dos valores iguales.
  • Los indices FULL TEXT permiten realizar bÃ�ºsquedas de palabras sobre tablas MYSAM. Puedes crear indices FULLTEXT sobre columnas tipo CHAR, VARCHAR o TEXT. Una vez creado puedes hacer bÃ�ºsquedas del tipo:
 SELECT * FROM nombre_tabla WHERE MATCH(nombre_indice_fulltext) AGAINST('palabra_a_buscar');

Los �­ndices ordinarios no tienen restricciones en cuanto a la existencia de valores id�©nticos o nulos. Una posibilidad interesante, si pensamos crear un �­ndice sobre columnas CHAR y VARCHAR es la de limitar el campo a indexar. Por ejemplo, cada entrada en la columna puede ser de hasta 40 caracteres y nosotros indexar unicamente los primeros 10 de cada una. Para crear estos �­ndices basta con indicar entre par�©ntesis el numero de caracteres a indexar despues del nombre de la columna:

 ALTER TABLE libros ADD INDEX idx_autor(nombre(10), apellidos(10));


Tips de indices

Si necesitamos un select del tipo SELECT ... WHERE columna_1 = X AND columna_2 = Y y ya tenemos un INDEX con la columna_1, podemos crear un segundo indice con la columna 2, o mejor todav�­a, crear un �ºnico indice combinado con las columnas 1 y 2. Estos son los �­ndices multicolumna, o compuestos.

No obstante si tienes �­ndices multicolumna y los utilizas en las clausulas WHERE, incluir siempre de izquierda a derecha las columnas indexadas; o el indice NO se usar�¡:


Bibliograf�­a =

http://dev.mysql.com/doc/refman/6.0/en/mysql-indexes.html http://dev.mysql.com/doc/refman/6.0/en/group-by-optimization.html http://dev.mysql.com/doc/refman/6.0/en/order-by-optimization.html

Personal tools