¿Qué es un índice en SQL?


¿Qué es un índice en SQL? ¿Puedes explicar o referenciar para entender claramente?

¿Dónde debo usar un índice?

 319
Author: Dorian, 2010-06-02

11 answers

Se utiliza un índice para acelerar la búsqueda en la base de datos. MySQL tiene una 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 encontrar eficientemente todas las filas que coincidan 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 cláusula WHERE, el servidor SQL tiene que caminar a través de toda la tabla y compruebe cada fila para ver si coincide, lo que puede ser una operación lenta en tablas grandes.

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

En MySQL puedes usar EXPLAIN delante de tu instrucción SELECT para ver si tu consulta hará uso de algún índice. Este es un buen comienzo para la solución de problemas problemas de rendimiento. Leer más aquí: http://dev.mysql.com/doc/refman/5.0/en/explain.html

 277
Author: Emil Vikström,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-05 06:00:44

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 de todos los 'Hilditch justo al lado uno del otro. Aquí las claves para el índice agrupado son (lastname, firstname).

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

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

Un índice no agrupado es diferente, ya que puede tener muchos de ellos y, a continuación, seleccione 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á activado (ciudad, dirección)

Imagínese si tuviera que buscar en la guía telefónica a todas las personas que viven en 'Londres', con solo el índice agrupado tendría que busque cada elemento en la guía telefónica, ya que la clave en el índice agrupado está encendida (apellido, nombre) y, como resultado, las personas que viven en Londres se dispersan aleatoriamente en todo el índice.

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

Espero que eso ayude!

 131
Author: Dave Hilditch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-01 13:44:44

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 todo el libro – que es el equivalente de un escaneo completo de la tabla en la terminología de la base de datos – cuando puede ir al índice en la parte posterior del libro, que le dirá las páginas exactas donde puede encontrar información sobre 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í

 112
Author: Arun Kumar M,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-18 17:42:38

Se utiliza un índice para acelerar el rendimiento de las consultas. Lo hace reduciendo el número 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. Sólo puede haber un índice agrupado por tabla (el índice agrupado ES la tabla). Todos los demás índices de una tabla se denominan no agrupados.

 72
Author: Mitch Wheat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-15 00:50:29

Los índices tienen que ver con encontrar datos rápidamente . Los índices de una base de datos son análogos a los índices que se encuentran en un libro. Si un libro tiene un índice, y les pido que encuentren un capítulo en ese libro, pueden 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 encuentre datos rápidamente. Si eres nuevo en los índices, los siguientes videos, pueden ser muy útiles. De hecho, he aprendido mucho de ellos.

Índice conceptos Básicos
agrupados y No Agrupados Índices
Únicos y No los Índices Únicos
Ventajas y desventajas de los índices

 36
Author: Suresh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-25 12:39:29

Bien en el índice general es un B-tree. Hay dos tipos de índices: agrupados y no agrupados.

Clustered index 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 una 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 de la 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). Índices es un tema muy grande e interesante. Puedo decir que crear índices en grandes bases de datos es una especie de arte a veces.

 18
Author: Voice,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-29 18:45:41

INDEXES - para encontrar datos fácilmente

UNIQUE INDEX - no se permiten valores duplicados

Sintaxis para INDEX

CREATE INDEX INDEX_NAME ON TABLE_NAME(COLUMN);

Sintaxis para UNIQUE INDEX

CREATE UNIQUE INDEX INDEX_NAME ON TABLE_NAME(COLUMN);
 14
Author: RAGU,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-29 21:41:18

El ÍNDICE es una técnica de optimización del rendimiento que acelera el proceso de recuperación de datos. Es una estructura de datos persistente que se asocia 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 el filtro WHERE. De lo contrario, es decir, una consulta sin WHERE-filter selecciona datos y procesos completos. Buscar tabla completa sin ÍNDICE se llama Escaneo de tablas.

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

  1. Para la comprensión del cocnept: http://dotnetauthorities.blogspot.in/2013/12/Microsoft-SQL-Server-Training-Online-Learning-Classes-INDEX-Overview-and-Optimizations.html
  2. Para la comprensión de la implementación: http://dotnetauthorities.blogspot.in/2013/12/Microsoft-SQL-Server-Training-Online-Learning-Classes-INDEX-Creation-Deletetion-Optimizations.html
 9
Author: nayeemDotNetAuthorities,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-01 15:17:49

Si está utilizando SQL Server, uno de los mejores recursos son sus propios Libros en línea que viene con la instalación! Es el 1er 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 hacer.

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

 5
Author: cloneofsnake,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-02 06:34:34

Un índice se utiliza por varias razones diferentes. La razón principal es acelerar las consultas para que pueda obtener filas o 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.

 4
Author: Senseful,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-02 06:29:00

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

Sin indexación Así que 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)

introduzca la descripción de la imagen aquí

Cuando aplicar indexación, la consulta encontrará rápidamente los datos sin leer cada uno de ellos solo 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.

 0
Author: Kravi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-20 20:15:48