¿Qué es un índice en SQL?

440

¿Qué es un índice en SQL? ¿Puedes explicar o hacer referencia para entender con claridad?

¿Dónde debo usar un índice?

Surya sasidhar
fuente

Respuestas:

377

Se utiliza un índice para acelerar la búsqueda en la base de datos. MySQL tiene buena documentación sobre el tema (que también es relevante para otros servidores SQL): http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html

Se puede usar un índice para buscar eficientemente todas las filas que coinciden con alguna columna en su consulta y luego recorrer solo ese subconjunto de la tabla para encontrar coincidencias exactas. Si no tiene índices en ninguna columna de la WHEREcláusula, el SQLservidor debe recorrer toda la tabla y verificar cada fila para ver si coincide, lo que puede ser una operación lenta en tablas grandes.

El índice también puede ser un UNIQUEíndice, lo que significa que no puede tener valores duplicados en esa columna, o PRIMARY KEYque en algunos motores de almacenamiento define dónde se almacena el valor en el archivo de la base de datos.

En MySQL puede usarlo EXPLAINfrente a su SELECTdeclaración para ver si su consulta utilizará algún índice. Este es un buen comienzo para solucionar problemas de rendimiento. Lea más aquí: http://dev.mysql.com/doc/refman/5.0/en/explain.html

Emil Vikström
fuente
"El índice también puede ser un índice ÚNICO ..." Solo para confirmar con usted, ¿eso significa que el índice puede no ser ÚNICO? Siempre pensé que es ÚNICO. Soy bastante nuevo en SQL, perdóname
Daniel Kurniadi
@DanielKurniadi La mayoría de los índices no son únicos. Es posible que tenga una base de datos de usuarios y quiera consultar a todos los que viven en Gotemburgo. Un índice en el campo "ciudad" aceleraría mi consulta. Pero hay más de 1 usuario viviendo en Gotemburgo, por lo que el índice no debe ser único.
Emil Vikström
174

Un índice agrupado es como el contenido de una guía telefónica. Puede abrir el libro en 'Hilditch, David' y encontrar toda la información para todos los 'Hilditch' uno al lado del otro. Aquí las claves para el índice agrupado son (apellido, nombre).

Esto hace que los índices agrupados sean excelentes para recuperar muchos datos basados ​​en consultas basadas en rango, ya que todos los datos se encuentran uno al lado del otro.

Dado que el índice agrupado está realmente relacionado con la forma en que se almacenan los datos, solo hay uno de ellos posible por tabla (aunque puede hacer trampa para simular múltiples índices agrupados).

Un índice no agrupado es diferente porque puede tener muchos de ellos y luego apuntan a los datos en el índice agrupado. Podría tener, por ejemplo, un índice no agrupado en la parte posterior de una guía telefónica que está tecleado (ciudad, dirección)

Imagínese si tuviera que buscar a través de la guía telefónica a todas las personas que viven en 'Londres'; con solo el índice agrupado, tendría que buscar en cada elemento de la guía telefónica ya que la tecla en el índice agrupado está activada (apellido, nombre) y, como resultado, las personas que viven en Londres se encuentran dispersas al azar en todo el índice.

Si tiene un índice no agrupado en (ciudad), estas consultas se pueden realizar mucho más rápidamente.

¡Espero que ayude!

Dave Hilditch
fuente
151

Una muy buena analogía es pensar en un índice de base de datos como un índice en un libro. Si tiene un libro sobre países y está buscando India, entonces, ¿por qué hojear el libro completo, que es el equivalente a un escaneo completo de la tabla en la terminología de la base de datos, cuando puede ir al índice al final de la página? libro, que le dirá las páginas exactas donde puede encontrar información sobre la India. Del mismo modo, como un índice de libro contiene un número de página, un índice de base de datos contiene un puntero a la fila que contiene el valor que está buscando en su SQL.

Más aquí

Arun Kumar M
fuente
2
Admiro a los muchachos experimentados que explican cosas usando "analogías". +1
snr
82

Se utiliza un índice para acelerar el rendimiento de las consultas. Lo hace al reducir la cantidad de páginas de datos de la base de datos que deben ser visitadas / escaneadas.

En SQL Server, un índice agrupado determina el orden físico de los datos en una tabla. Solo puede haber un índice agrupado por tabla (el índice agrupado ES la tabla). Todos los demás índices en una tabla se denominan no agrupados.

Trigo Mitch
fuente
49

Los índices tienen que ver con encontrar datos rápidamente .

Los índices en una base de datos son análogos a los índices que encuentra en un libro. Si un libro tiene un índice, y le pido que encuentre un capítulo en ese libro, puede encontrarlo rápidamente con la ayuda del índice. Por otro lado, si el libro no tiene un índice, tendrá que pasar más tiempo buscando el capítulo mirando cada página desde el principio hasta el final del libro.

De manera similar, los índices en una base de datos pueden ayudar a las consultas a encontrar datos rápidamente. Si eres nuevo en los índices, los siguientes videos pueden ser muy útiles. De hecho, he aprendido mucho de ellos.

Conceptos básicos del índice Índices
agrupados y no agrupados Índices
únicos y no únicos
Ventajas y desventajas de los índices

Suresh
fuente
Leer todas las respuestas me hizo preguntarme por qué no indexar todo. +1 por incluir el enlace que contiene las desventajas.
Lakshay Garg
@LakshayGarg A veces, la indexación innecesaria también puede ralentizar el tiempo de ejecución de la consulta, por lo que no deberíamos intentar indexar todo. Al igual que todo tiene sus propios pros y contras.
Gaurav Rajdeo
@LakshayGarg Gaurav Rajdeo tiene razón. Mantenga también la misma analogía: es posible que desee indexar cada capítulo, figura o tabla de un libro, pero no todos los párrafos, oraciones o palabras. Normalmente, eso sería una exageración y conduciría a complicaciones innecesarias. Espero que esto esté lo suficientemente cerca de la imagen dibujada en esta respuesta.
colidyre
23

Bueno, en general el índice es a B-tree. Hay dos tipos de índices: agrupados y no agrupados.

El índice agrupado crea un orden físico de filas (puede ser solo una y, en la mayoría de los casos, también es una clave primaria; si crea una clave primaria en la tabla, también crea un índice agrupado en esta tabla).

El índice no agrupado también es un árbol binario, pero no crea un orden físico de filas. Por lo tanto, los nodos hoja del índice no agrupado contienen PK (si existe) o índice de fila.

Los índices se utilizan para aumentar la velocidad de búsqueda. Porque la complejidad es de O (log N). Los índices es un tema muy amplio e interesante. Puedo decir que crear índices en bases de datos grandes es a veces una especie de arte.

Voz
fuente
66
en general, es un árbol b en lugar de un árbol binario.
Mitch Wheat
entonces, debido a que los índices usan árboles de equilibrio automático, cada vez que agrega / elimina una fila, se equilibrará sola, lo que hace que la inserción / eliminación sea más costosa ... ¿correcto?
David Refaeli
20

INDEXES - para encontrar datos fácilmente

UNIQUE INDEX - valores duplicados no están permitidos

Sintaxis para INDEX

CREATE INDEX INDEX_NAME ON TABLE_NAME(COLUMN);

Sintaxis para UNIQUE INDEX

CREATE UNIQUE INDEX INDEX_NAME ON TABLE_NAME(COLUMN);
RAGU
fuente
13

Primero, debemos entender cómo se ejecuta la consulta normal (sin indexación). Básicamente atraviesa cada fila una por una y cuando encuentra los datos, regresa. Consulte la siguiente imagen. (Esta imagen ha sido tomada de este video ).

Sin indexación Supongamos que la consulta es encontrar 50, tendrá que leer 49 registros como una búsqueda lineal.

Consulte la siguiente imagen. (Esta imagen ha sido tomada de este video )

ingrese la descripción de la imagen aquí

Cuando aplicamos la indexación, la consulta descubrirá rápidamente los datos sin leer cada uno de ellos simplemente eliminando la mitad de los datos en cada recorrido como una búsqueda binaria. Los índices mysql se almacenan como B-tree donde todos los datos están en el nodo hoja.

Kravi
fuente
12

INDEX es una técnica de optimización del rendimiento que acelera el proceso de recuperación de datos. Es una estructura de datos persistente asociada con una tabla (o vista) para aumentar el rendimiento durante la recuperación de los datos de esa tabla (o vista).

La búsqueda basada en índices se aplica más particularmente cuando sus consultas incluyen filtro WHERE. De lo contrario, es decir, una consulta sin filtro WHERE selecciona datos y procesos completos. La búsqueda de una tabla completa sin ÍNDICE se llama exploración de tabla.

Encontrará información exacta para los índices SQL de manera clara y confiable: siga estos enlaces:

  1. Para una comprensión inteligente: http://dotnetauthorities.blogspot.in/2013/12/Microsoft-SQL-Server-Training-Online-Learning-Classes-INDEX-Overview-and-Optimizations.html
  2. Para una comprensión inteligente de la implementación: http://dotnetauthorities.blogspot.in/2013/12/Microsoft-SQL-Server-Training-Online-Learning-Classes-INDEX-Creation-Deletetion-Optimizations.html
nayeemDotNetAuthorities
fuente
6

Un índice se usa por varias razones diferentes. La razón principal es acelerar las consultas para que pueda obtener filas u ordenar filas más rápido. Otra razón es definir una clave primaria o un índice único que garantice que ninguna otra columna tenga los mismos valores.

Sensato
fuente
6

Si está utilizando SQL Server, uno de los mejores recursos es su propio Books Online que viene con la instalación. Es el primer lugar al que me referiría para CUALQUIER tema relacionado con SQL Server.

Si es práctico "¿cómo debo hacer esto?" tipo de preguntas, entonces StackOverflow sería un mejor lugar para preguntar.

Además, no he regresado por un tiempo, pero sqlservercentral.com solía ser uno de los principales sitios relacionados con SQL Server.

cloneofsnake
fuente
0

Un índice es un on-disk structure associated with a table or view that speeds retrieval of rows from the table or view. Un índice contiene claves creadas a partir de una o más columnas en la tabla o vista. Estas claves se almacenan en una estructura (árbol B) que permite a SQL Server encontrar la fila o filas asociadas con los valores clave de forma rápida y eficiente.

Indexes are automatically created when PRIMARY KEY and UNIQUE constraints are defined on table columns. For example, when you create a table with a UNIQUE constraint, Database Engine automatically creates a nonclustered index.

Si configura una CLAVE PRIMARIA, Motor de base de datos crea automáticamente un índice agrupado, a menos que ya exista un índice agrupado. Cuando intenta imponer una restricción PRIMARY KEY en una tabla existente y ya existe un índice agrupado en esa tabla, SQL Server aplica la clave primaria utilizando un índice no agrupado.

Consulte esto para obtener más información sobre los índices (agrupados y no agrupados): https://docs.microsoft.com/en-us/sql/relational-databases/indexes/clustered-and-nonclustered-indexes-descriptions?view= sql-server-ver15

¡Espero que esto ayude!

adSad
fuente