Índice de base de datos
|
Este artículo Necesita referencias adicionales para verificación. (Marzo de 2011) |
A Índice de base de datos es un estructura de datos que mejora la velocidad de las operaciones de recuperación de datos en un tabla de base de datos costo adicional escribe y espacio de almacenamiento para mantener la estructura de datos del índice. Los índices se utilizan para localizar rápidamente datos sin tener que buscar cada fila en una tabla de base de datos cada vez que se accede a una tabla de base de datos. Los índices pueden crearse mediante uno o más columnas de una tabla de base de datos, proporcionando la base para ambos rápido al azar búsquedas y acceso eficiente de registros ordenados.
Un índice es una copia de seleccionar columnas de datos de una tabla que puede ser buscado muy eficaz que también incluye un disco bajo nivel bloque dirección o enlace directo a la fila completa de datos de que fue copiado. Algunas bases de datos extienden el poder de la indexación de direcciones por dejar a los desarrolladores crear índices en funciones o Expresiones. Por ejemplo, puede crear un índice en Upper(Last_Name)
, que sólo guardar las versiones mayúsculas de la last_name
campo en el índice. Otra opción a veces apoyado es el uso de índices parciales, donde se crean las entradas de índice solamente para aquellos registros que cumplan una expresión condicional. Un aspecto adicional de flexibilidad es permitir la indexación en funciones definidas por el usuario, así como expresiones forman de un surtido de funciones incorporadas.
Contenido
- 1 Uso
- 1.1 Soporte para búsqueda rápida
- 1.2 Las limitaciones de la base de datos policial
- 2 Índice arquitectura/indexación métodos
- 2.1 No agrupado
- 2.2 Cluster
- 2.3 Clúster
- 3 Orden de columna
- 4 Aplicaciones y limitaciones
- 5 Tipos de índices
- 5.1 Índice de mapa de bits
- 5.2 Índice denso
- 5.3 Escaso Índice
- 5.4 Índice inverso
- 6 Implementaciones de índice
- 6.1 Índice de control de concurrencia
- 7 Índice de cobertura
- 8 Normalización
- 9 Véase también
- 10 Referencias
Uso
Soporte para búsqueda rápida
Mayoría base de datos el software incluye tecnología que permite la indexación tiempo sub-lineal búsqueda para mejorar el rendimiento, como búsqueda lineal es ineficiente para grandes bases de datos.
Supongamos que una base de datos contiene los elementos de datos N y uno debe ser obtenido con base en el valor de uno de los campos. Una implementación sencilla recupera y analiza cada elemento de acuerdo a la prueba. Si hay sólo un elemento coincidente, esto puede parar cuando encuentra ese elemento único, pero si hay varios partidos, se debe probar todo. Esto significa que el número de operaciones en el peor de los casos es O(N) o tiempo lineal. Puesto que las bases de datos comúnmente contienen millones de objetos, y puesto que la búsqueda es una operación común, a menudo es deseable para mejorar el rendimiento.
Un índice es una estructura de datos que mejora el rendimiento de la búsqueda. Hay muchos diferentes estructuras de datos utilizado para este propósito y de hecho una parte sustancial del campo de Ciencias de la computación se dedica al diseño y análisis de estructuras de datos de índice.[citación necesitada] Hay diseño complejo ventajas y desventajas que implica la búsqueda rendimiento, tamaño y rendimiento de actualización de índice. Muchos diseños de índice exhiben logarítmica)O(log(N))) resultados de búsqueda y en algunas aplicaciones es posible lograr (planoO(1)) el rendimiento.
Las limitaciones de la base de datos policial
Los índices se utilizan para la policía limitaciones de la base de datos, como único, la exclusión, clave principal y clave externa. Un índice puede ser declarado como único, que crea una restricción implícita en la tabla subyacente. Sistemas de base de datos generalmente implícitamente crean un índice en un conjunto de columnas declarada PRIMARY KEY, y algunos son capaces de usar un índice ya existente a la policía esta restricción. Muchos sistemas de bases de datos requieren que tanto referencias y referenciados conjuntos de columnas en una restricción FOREIGN KEY están indexados, mejorando así el desempeño de inserciones, actualizaciones y eliminaciones a las tablas que participan en la restricción.
Algunos sistemas de bases de datos apoyan una restricción de exclusión que asegura que, para un registro recién insertado o actualizado, un cierto predicado depara ningún otro registro. Esto puede utilizarse para implementar una restricción UNIQUE (con predicado igualdad) o limitaciones más complejas, como asegurar que no se superponen intervalos de tiempo o no objetos de geometría que se cruzan se almacenaría en la tabla. Un índice de búsqueda rápida para satisfacer el predicado los registros de apoyo es necesaria para tal una restricción de la policía.[1]
Índice arquitectura/indexación métodos
No agrupado
Los datos están presentes en orden arbitrario, pero la orden lógico es especificado por el índice. Las filas de datos pueden extenderse a lo largo de la tabla independientemente del valor de la columna indexada o expresión. El árbol del índice no agrupado contiene las claves de índice ordenados, con el nivel de hojas del índice que contiene el puntero al registro (página y la fila del número en la página de datos en los motores organizado por página; offset en motores organizadas por el archivo de la fila).
En un índice no agrupado
- El orden físico de las filas no es lo mismo que el orden de índice.
- Las columnas indexadas son típicamente no principal columnas clave utilizadas en unirse, donde y cláusulas ORDER BY.
Puede haber más de un índice no agrupado en una tabla de base de datos.
Cluster
Agrupamiento altera el bloque de datos en un cierto orden distinto para que coincida con el índice, que resulta en los fila datos se almacenan en orden. Por lo tanto, puede crearse solamente un índice agrupado en una tabla de base de datos. Los índices agrupados pueden aumentar considerablemente la velocidad global de recuperación, pero generalmente solamente donde los datos se accede secuencialmente en la misma o inverso del índice agrupado, o cuando una gama de artículos se ha seleccionado.
Puesto que los registros físicos son en este orden en el disco, la fila en la secuencia se procede inmediatamente antes o después de la última, y tan pocos datos bloque lecturas son requeridos. La principal función de un índice agrupado es por lo tanto, la ordenación de las filas de datos físicos según los bloques de índices que apuntan a ellos. Algunas bases de datos separan los bloques de datos e índices en archivos separados, otros pusieron dos bloques de datos completamente diferente dentro de los mismos archivos físicos.
Clúster
Cuando se unen varias bases de datos y tablas múltiples, se refiere como un clúster (no debe confundirse con índice agrupado descrita anteriormente). Los registros de las tablas de compartir el valor de una clave de clúster se almacenarán juntos en el mismo o cerca de los bloques de datos. Esto puede mejorar las uniones de estas tablas en la clave de clúster, puesto que los registros coincidentes se almacenan juntos y menos I/O es necesaria para localizarlos.[2] La configuración del clúster define la disposición de datos en las tablas que son parte de la agrupación. Un cluster puede codificar con un B-Tree Índice o una tabla hash. El bloque de datos donde se almacena el registro de la tabla se define por el valor de la clave de clúster.
Orden de columna
El orden en que la definición de índice define las columnas es importante. Es posible recuperar un conjunto de identificadores de fila usando sólo la primera columna indexada. Sin embargo, no es posible ni eficiente (en la mayoría de bases de datos) para recuperar el conjunto de identificadores de fila usando sólo la columna indexada segunda o mayor.
Por ejemplo, imagine una guía telefónica que es organizada por la ciudad primero, luego por el apellido y luego por nombre. Si le administran la ciudad, puede extraer fácilmente la lista de todos los números de teléfono de esa ciudad. Sin embargo, en este libro de teléfono sería muy tedioso encontrar todos los números de teléfono para un determinado apellido. Tienes que buscar dentro de la sección de cada ciudad las entradas con ese apellido. Algunas bases de datos pueden hacer esto, otros simplemente no usan el índice.
En el ejemplo de libreta de teléfonos con un índice compuesto creado en el (columnasciudad, last_name, first_name
), si buscamos dando valores exactos para todos los tres campos, tiempo de búsqueda es mínimo, pero si proporcionamos los valores para ciudad
y first_name
Sólo la búsqueda utiliza solamente el ciudad
campo para recuperar todos igualados registros. A continuación, comprueba el juego con una búsqueda secuencial first_name
. Así que, para mejorar el rendimiento, uno debe asegurarse de que el índice se crea bajo la orden de las columnas de búsqueda.
Aplicaciones y limitaciones
Los índices son útiles para muchas aplicaciones pero con algunas limitaciones. Considere la siguiente SQL Declaración: SELECCIONAR first_name FROM personas WHERE last_name = 'Smith';
. Para procesar esta declaración sin un índice el software de base de datos debe ver la columna last_name en cada fila de la tabla (esto se conoce como un escaneo de tabla completa). Con un índice de la base de datos simplemente sigue el B-tree estructura de datos hasta que se encontró la entrada de Smith; Esto es computacionalmente mucho menos costoso que un escaneo completo de la tabla.
Tenga en cuenta esta instrucción SQL: Seleccione email_address de clientes donde email_address como '% @copro.org';. Esta consulta produciría una dirección de correo electrónico para cada cliente cuya dirección de correo electrónico termina con "@copro.org", pero incluso si la columna email_address ha sido indexada la base de datos debe realizar un análisis completo índice. Esto es porque el índice se construye con la suposición de que palabras van de izquierda a derecha. Con un comodín al principio del término de búsqueda, el software de base de datos es incapaz de usar la estructura de datos subyacente de B-tree (en otras palabras, la cláusula WHERE es No SARGable). Este problema puede ser resuelto mediante la adición de otro índice creado en Reverse(EMAIL_ADDRESS) y una consulta SQL como esta: Email_address selecto de clientes donde reverse(email_address) como reverse('%@copro.org');. Esto pone el wild-card en la parte más a la derecha de la consulta (ahora gro.aidepikiw@%), que puede satisfacer el índice de reverse(email_address).
Cuando se utilizan los caracteres comodín en ambos lados de la palabra de búsqueda como %Copro.org%, el índice disponible en este campo no se utiliza. Se realiza sólo una búsqueda secuencial, que lleva tiempo O(N). Entonces, índice debe estar disponible en la búsqueda se realiza en las columnas.
Tipos de índices
Índice de mapa de bits
Un índice de mapa de bits es una clase especial de índice que almacena la mayor parte de sus datos como matrices de bits (mapas de bits) y responde a la mayoría de las consultas mediante la realización de operaciones lógicas bit a bit en estos mapas de bits. Los más utilizados los índices, tales como B + árboles, son más eficientes si los valores de índice que no repita o repetir un menor número de veces. En contraste, el índice de mapa de bits está diseñado para los casos donde los valores de una variable se repiten muy frecuentemente. Por ejemplo, el campo de género en una base de datos del cliente contiene generalmente a lo sumo tres valores distintos: masculino, femenino o de otros. Para dichas variables, el índice de mapa de bits puede tener una ventaja considerable en el rendimiento sobre los árboles utilizados.
Índice denso
Un índice denso en bases de datos es un archivo con pares de claves y punteros para todos los registro en el archivo de datos. Cada clave de este archivo está asociado con un puntero especial a un registro en el archivo de datos ordenados. En los índices agrupados con duplicado de llaves, los puntos de índice denso el primer registro con esa llave.[3]
Escaso Índice
Un escaso índice de bases de datos es un archivo con pares de claves y sugerencias para cada bloque en el archivo de datos. Cada clave de este archivo está asociado con un puntero especial al bloque en el archivo de datos ordenados. En los índices agrupados con duplicado de llaves, los puntos de escaso Índice la clave de búsqueda más bajo en cada bloque.
Índice inverso
Un índice clave inverso invierte el valor de la clave antes de entrar, en el índice. Por ejemplo, el valor 24538 se convierte en 83542 en el índice. Invierte el valor de la clave es particularmente útil para la indexación de datos tales como números de secuencia, donde nuevos valores claves monótonamente aumentan.
Implementaciones de índice
Los índices pueden implementarse usando una variedad de estructuras de datos. Índices populares incluyen árboles de equilibrado, Árboles B + y hashes.[4]
En Microsoft SQL Server, la nodo hoja el índice agrupado corresponde a los datos reales, no simplemente un puntero a datos que residen en otros países, como es el caso de un índice no agrupado.[5] Cada relación puede tener un índice agrupado único y muchos índices unclustered.[6]
Índice de control de concurrencia
Un índice es típicamente accediendo simultáneamente varias operaciones y procesos y por lo tanto necesita control de concurrencia. Mientras que en principio los índices pueden utilizar los métodos de control de concurrencia de base de datos común, existen métodos de control de concurrencia especializados para los índices, que se aplican en conjunción con los métodos comunes para un aumento significativo del rendimiento.
Índice de cobertura
En la mayoría de los casos, se utiliza un índice para localizar rápidamente los registros de datos que se leen los datos requeridos. En otras palabras, el índice es utilizado para localizar los registros de datos en la tabla y no para devolver datos.
Un índice de cobertura es un caso especial donde el índice de sí mismo contiene los campos de datos requeridos y puede devolver los datos.
Considere la siguiente tabla (otros campos se omite):
ID | Nombre | Otros campos |
---|---|---|
12 | Enchufe | ... |
13 | Lámpara | ... |
14 | Fusible | ... |
Para encontrar el nombre de ID 13, un índice de (ID) es útil, pero aún debe leer el expediente para obtener el nombre. Sin embargo, un índice de (ID, nombre) contiene el campo de los datos requeridos y elimina la necesidad de buscar el registro.
Un índice de cobertura puede acelerar drásticamente la recuperación de datos pero sí mismo puede ser grande debido a las llaves adicionales, que ralenticen la inserción de datos y actualización. Para reducir el tamaño de tal índice, algunos sistemas permiten incluir campos no clave en el índice. Campos no clave no se forman parte del índice ordenamiento pero sólo se incluyeron en el nivel de hojas, permitiendo un índice de cobertura con menor tamaño del índice general.
Normalización
Ningún estándar define cómo crear índices, porque la norma ISO SQL no cubre aspectos físicos. Los índices son una de las partes físicas del concepto de base de datos entre otros como almacenamiento de información (tablas o grupos de archivos). Proveedores RDBMS que todos dan una sintaxis de CREATE INDEX con algunas opciones específicas que dependen de las capacidades de su software.
Véase también
- Índice de bloqueo
- Índice (buscador)
Referencias
- ^ Documentación de PostgreSQL 9.1.2: Crear tabla
- ^ Resumen de racimos Base de datos Oracle ® conceptos 10g Release 1 (10,1)
- ^ Sistemas de base de datos: El libro completo. Hector Garcia-Molina, Jeffrey D. Ullman, Jennifer D. Widom
- ^ Gavin Powell (2006). "Capítulo 8: creación de modelos de base de datos rápido rendimiento". Diseño de base de datos de principio ISBN 978-0-7645-7490-0. Wrox Publishing.
- ^ "Las estructuras del índice agrupado". SQL Server 2005 libros en línea (septiembre de 2007).
- ^ Daren Bieniek, Randy Dess, Mike Hotel, Javier Loria, Adam Machanic, Antonio Soto, Adolfo Wiernik (enero de 2006). "Capítulo 4: crear índices". Gestión e implementación de SQL Server 2005. Microsoft Press.
|