2011-04-17 10 views
14

Sé que necesito tener un conjunto de claves principal, y establecer cualquier cosa que deba ser única como clave única, pero ¿qué es un ÍNDICE y cómo los uso?¿Cuáles son los mayores beneficios de usar INDEXES en mysql?

¿Cuáles son los beneficios? Pros & ¿Contras? Noté que puedo usarlos o no, ¿cuándo debería?

+2

de referencia: [artículo de Wikipedia] (http://en.wikipedia.org/wiki/Index_ (base de datos)) –

+0

de rebajas comió sus paréntesis –

Respuesta

1

No tiene tiene tener una clave principal. Los índices (de cualquier tipo) se usan para acelerar las consultas y, al menos con el motor InnoDB, imponen restricciones de clave externa. Si usa un índice único o simple (no único) depende de si desea permitir valores duplicados en la clave.

0

Un índice permite MySQL para encontrar datos más rápida. Los usa en columnas que usará en las cláusulas WHERE. Por ejemplo, si tiene una columna llamada score, y quiere encontrar todo con score > 5, esto significa que MySQL necesitará escanear la tabla WHOLE para encontrar esos puntajes. Sin embargo, si usa un índice de BTREE, encontrar aquellos que cumplan con esa condición ocurrirá MUCHO más rápido.

Los índices tienen un precio: espacio en disco y memoria. Si es una mesa muy grande, su índice crecerá bastante grande.

9

Pros:

Búsqueda más rápida para los resultados. Esto se trata de reducir el número de IO de disco. En lugar de escanear toda la tabla para obtener los resultados, puede reducir el número de IO de disco (obtención de páginas) utilizando estructuras de índice como B-Trees o Hash Indexes para obtener sus datos más rápidamente.

Contras:

escrituras
  • más lenta (potencialmente). No solo tiene que escribir sus datos en sus tablas, sino que también debe escribir en sus índices. Esto puede provocar que el sistema reestructure la estructura del índice (índice Hash, B-Tree, etc.), que puede ser muy costoso desde el punto de vista computacional.

  • Toma más espacio en el disco, por supuesto. Está almacenando más datos.

0

Piénselo de esta manera: ¿cuáles son los mayores beneficios de tener un índice en un libro? Es casi lo mismo. Tienes un libro un poco más grande, pero puedes buscar cosas rápidamente. Cuando crea un índice en una columna, dice que desea poder hacer referencia a él en una cláusula where para buscarlo rápidamente.

3

La manera más fácil de pensar en un índice es pensar en un diccionario. Tiene palabras y tiene definiciones correspondientes a esas palabras. El diccionario tiene un índice sobre "palabra" porque cuando vas a un diccionario quieres buscar una palabra rápidamente, luego obtienes su definición. Un diccionario generalmente contiene solo un índice, un índice por palabra.

Una base de datos es análoga. Cuando tenga una gran cantidad de datos en la base de datos, tendrá ciertas formas en que desea obtenerlos. Supongamos que tiene una tabla de Usuario y a menudo busca un usuario en la columna Nombre. Dado que esta es una operación que está haciendo a menudo en su aplicación, debería considerar usar un índice en esta columna.Eso creará una estructura en la base de datos que se ordenará, si se quiere, por esa columna, de modo que buscar algo por nombre es como buscar una palabra en un diccionario. Si no tiene este índice, es posible que deba mirar TODAS las filas antes de determinar cuáles tienen un Nombre específico. Al agregar un índice, lo ha hecho rápido.

¿Por qué no poner un índice en todas las columnas y hacer que todas sean rápidas? Como todo, hay una compensación. Cada vez que inserte una fila en la tabla Usuario, la base de datos deberá realizar su magia y ordenar todo en su columna indexada. Esto puede ser costoso.

+0

Así que si mi mesa es muy grande con muchas filas, es mejor no usarlas y solo usar una PRIMARY KEY, la mayoría de mis cláusulas WHERE solo usan mi PRIMARY KEY de todos modos. Gracias por tu respuesta. – Basic

+0

No necesariamente: si tiene muchas filas y REALMENTE necesita obtener su información por otra cosa que no sea la clave principal, entonces realmente debe poner un índice en esa columna. Si las personas van a obtener información de esa columna constantemente, entonces debe ser rápida. Simplemente no desea agregar índices al azar porque hay consecuencias. ¡Espero que eso ayude! – skaz

18

Respuesta corta:
índices aceleran SELECT 's y ralentizar INSERT' s.

Normalmente es mejor tener índices, porque aceleran select más de lo que ralentizan insert.

En una UPDATE el índice puede acelerar las cosas camino hasta si un campo indexado se utiliza en la cláusula WHERE y las cosas lentas abajo si update uno de los campos indexados.

¿Cómo sabe cuándo usar un índice

Añadir EXPLAIN en frente de su estado SELECT.
así:

EXPLAIN SELECT * FROM table1 
WHERE unindexfield1 > unindexedfield2 
ORDER BY unindexedfield3 

le mostrará la cantidad de MySQL trabajo tendrá que hacer por cada uno de los campos no indexados.
Usando esa información puede decidir si vale la pena agregar índices o no.

Explica también le puede decir si es mejor dejar caer y el índice

EXPLAIN SELECT * FROM table1 
WHERE indexedfield1 > indexedfield2 
ORDER BY indexedfield3 

Si se seleccionan muy pocas filas, o MySQL decidieron ignoran el índice (que hace que de vez en cuando) entonces también podría soltar el índice, porque es ralentizando su insert s pero no acelerando su select.

Por otra parte, también podría ser que su declaración seleccionada no sea lo suficientemente inteligente.
(Disculpa la complejidad de la respuesta, intentaba mantenerlo simple pero fallido).

Enlace:
MySQL indexes - what are the best practices?

+0

¿cómo debo utilizar esta consulta ?: EXPLAIN SELECT * FROM table1 DONDE indexedfield1> indexedfield2 PEDIDO POR indexedfield3; Quiero decir que sé qué poner en indexedfield1, pero ¿qué hay de los indexedfield2 y indexedfield3? – Viscocent

Cuestiones relacionadas