Pregunta

Dado que la indexación es tan importante como el conjunto de datos aumenta de tamaño, puede alguien explicar cómo la indexación de las obras en una base de datos independiente del nivel?

Para obtener información sobre las consultas para indexar un campo, echa un vistazo ¿Cómo puedo índice de una base de datos de la columna.

¿Fue útil?

Solución

Por qué es necesaria?

Cuando los datos se almacenan en el disco, dispositivos de almacenamiento, éste se almacena en bloques de datos.Estos bloques se accede a ellos en su totalidad, haciendo de ellos los atómica de acceso de disco de la operación.Los bloques de disco están estructurados de la misma manera como las listas enlazadas;ambos contienen una sección para datos, un puntero a la ubicación de la siguiente nodo (o bloque), y ambos no necesitan ser almacenados de forma contigua.

Debido al hecho de que un número de registros sólo pueden ser ordenados en un campo, podemos afirmar que la búsqueda en un campo que no está ordenada requiere una Búsqueda Lineal que requiere N/2 bloque de accesos (en promedio), donde N es el número de bloques de la tabla abarca.Si ese campo no es una clave de campo (es decir,no contiene entradas únicas), todo el espacio de tablas debe ser buscado en N bloquear los accesos.

Mientras que con un campo ordenado, una Búsqueda Binaria puede ser utilizada, la cual ha log2 N bloquear los accesos.Además, desde la que se ordenan los datos, dado que no son clave de campo, el resto de la mesa no deben buscarse los valores duplicados, una vez que un valor más alto se encontró.Así, el aumento de rendimiento es considerable.

¿Qué es la indexación?

La indexación es una manera de ordenar un número de registros en varios campos.Crear un índice en un campo de una tabla se crea otra estructura de datos que contiene el valor del campo, y un puntero al registro se refiere.Esta estructura de índice se ordena, permitiendo Binario de Búsquedas a realizar en él.

La desventaja de la indización es que estos índices se requiere espacio adicional en el disco ya que los índices se almacenan en una tabla usando el motor MyISAM, este archivo puede llegar rápidamente a los límites de tamaño del sistema de archivos subyacente si muchos campos dentro de la misma tabla se indexan.

¿Cómo funciona?

En primer lugar, vamos a esbozar una base de datos de ejemplo esquema de la tabla;

Field name       Data type      Size on disk
id (Primary key) Unsigned INT   4 bytes
firstName        Char(50)       50 bytes
lastName         Char(50)       50 bytes
emailAddress     Char(100)      100 bytes

Nota:char fue utilizado en lugar de varchar a permitir una precisa valor de tamaño en disco.Esta base de datos de ejemplo contiene cinco millones de filas y es no indexada.El rendimiento de varias consultas de ahora va a ser analizado.Estos son de una consulta con el id (una ordenados campo de clave) y en uno con el nombre (que no son clave sin clasificar campo).

Ejemplo 1 - ordenados vs campos sin clasificar

Dada nuestra base de datos de ejemplo de r = 5,000,000 registros de tamaño fijo, dando una longitud de registro de R = 204 bytes y se almacenan en una tabla usando el motor MyISAM que está utilizando el tamaño de bloque por defecto B = 1,024 bytes.El factor de bloqueo de la tabla sería bfr = (B/R) = 1024/204 = 5 registros por bloque de disco.El número total de bloques necesario para mantener la tabla es N = (r/bfr) = 5000000/5 = 1,000,000 los bloques.

Una búsqueda lineal en el campo id requeriría un promedio de N/2 = 500,000 bloquear los accesos a encontrar un valor, dado que el campo id es un campo clave.Pero desde el campo id es también ordenados, una búsqueda binaria puede ser llevado a cabo, que requieren un promedio de log2 1000000 = 19.93 = 20 bloquear los accesos.Al instante podemos ver que esta es una mejora drástica.

Ahora el nombre el campo no es ni ordenada, ni un campo de clave, por lo que una búsqueda binaria es imposible, ni son los valores únicos, y por lo tanto la tabla requerirá la búsqueda hasta el final para conocer N = 1,000,000 bloquear los accesos.Es esta situación la que la indexación se pretende corregir.

Teniendo en cuenta que un índice de registro sólo contiene el campo indexado y un puntero al registro original, es lógico pensar que será más pequeño que el multi-registro de campo que apunta.Por lo que el índice en sí requiere un menor número de bloques de disco de la tabla original, que por lo tanto requiere menos bloquear los accesos a recorrer.El esquema de un índice en el nombre campo se describe a continuación;

Field name       Data type      Size on disk
firstName        Char(50)       50 bytes
(record pointer) Special        4 bytes

Nota:Punteros en MySQL son 2, 3, 4 o 5 bytes de longitud, dependiendo del tamaño de la tabla.

Ejemplo 2 - la indexación

Dada nuestra base de datos de ejemplo de r = 5,000,000 registros con un índice de longitud de registro de R = 54 bytes y utilizando el tamaño de bloque por defecto B = 1,024 bytes.El factor de bloqueo del índice sería bfr = (B/R) = 1024/54 = 18 registros por bloque de disco.El número total de bloques que se requiere para mantener el índice es N = (r/bfr) = 5000000/18 = 277,778 los bloques.

Ahora una búsqueda con el nombre campo puede utilizar el índice para aumentar el rendimiento.Esto permite una búsqueda binaria del índice, con un promedio de log2 277778 = 18.08 = 19 bloquear los accesos.Para encontrar la dirección de un registro real, que requiere una nueva bloquear el acceso a la lectura, con lo que el total 19 + 1 = 20 bloquear accesos, muy lejos de la 1,000,000 bloquear los accesos necesarios para encontrar un nombre coinciden en la tabla no indizada.

Cuándo debe utilizarse?

Dado que la creación de un índice requiere espacio en disco adicional (277,778 bloques extra en el ejemplo anterior, un ~28% de aumento), y que muchos de los índices puede causar problemas derivados de los sistemas de archivos de los límites de tamaño, una reflexión cuidadosa debe ser utilizado para seleccionar los campos correctos de índice.

Desde índices sólo se utiliza para acelerar la búsqueda de un campo coincidente dentro de los registros, es lógico que la indexación de campos que se utilizan sólo para la salida sería simplemente un desperdicio de espacio en disco y tiempo de procesamiento cuando se realiza una operación de inserción o eliminación, y por lo tanto debe ser evitado.También, dada la naturaleza de una búsqueda binaria, la cardinalidad o la exclusividad de los datos es importante.La indexación en un campo con una cardinalidad de 2 dividir los datos en la mitad, mientras que la cardinalidad de 1.000 retorno de aproximadamente 1.000 registros.Con tan baja cardinalidad de la eficacia se reduce a un tipo lineal, y que el optimizador de consultas evitar el uso del índice, si la cardinalidad es de menos de 30% del número de registro, haciendo que el índice de un desperdicio de espacio.

Otros consejos

La primera vez que leí esto fue muy útil para mí.Gracias.

Desde entonces he ganado algo de conocimiento acerca de la desventaja de la creación de índices:si usted escribe en una tabla (UPDATE o INSERT) con un índice, tiene en realidad dos operaciones de escribir en el sistema de archivos.Uno de los datos de la tabla y otro para los datos de índice (y la de recurrir de la misma (y - si agrupado - el recurso de la tabla de datos)).Si la tabla y el índice se encuentra en el mismo disco duro que esto cuesta más tiempo.Así, una tabla sin un índice (un montón) , permitiría más rápido las operaciones de escritura.(si tiene dos índices que terminaría con tres operaciones de escritura, y así sucesivamente)

Sin embargo, la definición de dos ubicaciones diferentes en dos discos duros diferentes para los datos del índice y la tabla de datos puede disminuir o eliminar el problema del aumento de los costos de tiempo.Esto requiere la definición de archivo adicionales grupos de acuerdo con los archivos de los discos duros y la definición de la tabla/index ubicación deseada.

Otro problema con los índices es su fragmentación a lo largo del tiempo a medida que los datos se inserta. REORGANIZE ayuda, usted debe escribir las rutinas que haber hecho.

En ciertas situaciones un montón, es más útil que una tabla con los índices,

e.g:- Si usted tiene un montón de rivales escribe, pero sólo una noche de lectura fuera de horas hábiles para la presentación de informes.

También, una diferenciación entre el clúster y los índices no agrupados es bastante importante.

Me ayudó:- ¿Qué Agrupados y No agrupados índice realmente significa?

Un índice es sólo una estructura de datos que hace la búsqueda más rápida para una columna específica en una base de datos.Esta estructura suele ser un b-árbol o una tabla hash, pero puede ser cualquier otra estructura de la lógica.

Ejemplo clásico "Índice de los Libros"

Considere la posibilidad de un "Libro de 1000 páginas, dividido por 100 secciones, cada sección con X páginas.

Simple, ¿eh?

Ahora, sin una página de índice, para encontrar una determinada sección que comienza con la letra "S", que no tienen otra opción que la exploración a través de todo el libro.yo.e:1000 páginas

Pero con una página de índice al principio, usted no está allí.Y más, para leer alguna sección en particular que importa, usted sólo tiene que mirar más de la página de índice, una y otra vez, cada vez.Después de encontrar la coincidencia de los índices que de manera eficiente puede saltar a la sección sin pasar por las otras secciones.

Pero entonces, además de 1000 páginas, necesitará otro ~10 páginas para mostrar la página de índice, de manera totalmente 1010 páginas.

Así, el índice es una sección independiente, que almacena los valores de la columna indizada + puntero a la indexado fila ordenados para la eficiencia de las búsquedas.

Las cosas son simples en las escuelas, ¿no?:P

Ahora, supongamos que queremos ejecutar una consulta para encontrar todos los detalles de cualquiera de los empleados que se denomina 'Abc'?

SELECT * FROM Employee 
WHERE Employee_Name = 'Abc'

¿Qué pasaría sin un índice?

Software de base de datos sería, literalmente, tiene que mirar en cada fila de la tabla Empleados para ver si el Employee_Name de esa fila es 'Abc'.Y, porque queremos que cada fila con el nombre de 'Abc' en su interior, no podemos simplemente dejar de mirar a la vez nos encontramos con sólo una fila con el nombre de 'Abc', porque no podría ser de otra filas con el nombre de Abc.Por lo tanto, cada fila hasta la última fila se debe buscar que significa que miles de filas en esta situación tendrá que ser examinado por la base de datos para buscar las filas con el nombre de 'Abc'.Esto es lo que se llama un análisis completo de la tabla

Cómo un índice de base de datos puede ayudar al rendimiento

El punto de tener un índice para acelerar las consultas de búsqueda esencialmente por la reducción del número de registros o filas en una tabla que necesitan ser examinados.Un índice es una estructura de datos (comúnmente un árbol B) que almacena los valores de una columna específica en una tabla.

¿Cómo los árboles B índice de trabajo?

La razón árboles B son los más populares de la estructura de datos para los índices es debido al hecho de que son eficientes en el tiempo – pues mira-ups, supresiones e inserciones, todo puede ser realizado en un tiempo logarítmico.Y, otra razón importante árboles B son más comúnmente utilizado es debido a que los datos que se almacenan en el interior del árbol B se pueden ordenar.El RDBMS normalmente determina que la estructura de datos se utiliza realmente para un índice.Pero, en algunos casos con ciertas RDBMS, en realidad se puede especificar que la estructura de datos que usted quiere que su base de datos que se utiliza para crear el índice.

Cómo se hace una tabla hash índice de trabajo?

La razón de hash se utilizan los índices es debido a que las tablas hash son muy eficientes cuando se trata de sólo buscan los valores.Así, las consultas que comparan para la igualdad en una cadena puede recuperar valores muy rápido si se utiliza un índice hash.

Por ejemplo, la consulta se discutió anteriormente podrían beneficiarse de un hash índice creado en el Employee_Name columna.La forma en que un hash índice de trabajo es que el valor de la columna será la clave en la tabla hash y el valor real asignada a esa tecla, sería simplemente un puntero a los datos de la fila en la tabla.Desde una tabla hash es básicamente una matriz asociativa, una típica entrada sería algo así como "Abc => 0x28939", donde 0x28939 es una referencia a la fila de la tabla donde Abc es almacenado en la memoria.Buscar un valor como "Abc" en una tabla hash índice y obtener una referencia a la fila en la memoria es, obviamente, mucho más rápido que el escaneo de la tabla para encontrar todas las filas con un valor de "Abc" en la Employee_Name columna.

Las desventajas de un índice hash

Tablas de Hash no se ordenan las estructuras de datos, y hay muchos tipos de consultas que hash índices no puede incluso ayudar con.Por ejemplo, supongamos que desea conocer todos los empleados que tienen menos de 40 años de edad.¿Cómo podría hacer eso con un índice de la tabla de hash?Así, no es posible debido a una tabla hash es sólo bueno para buscar la clave de los pares de valores – lo que significa que las consultas que la verificación de la igualdad

¿Qué es exactamente dentro de un índice de base de datos? Por lo tanto, ahora que usted sabe que un índice de base de datos se crea en una columna de una tabla, y que el índice almacena los valores de esa columna específica.Pero, es importante entender que un índice de base de datos no se guardan los valores en las otras columnas de la misma tabla.Por ejemplo, si queremos crear un índice en la Employee_Name columna, esto significa que el Employee_Age y Employee_Address los valores de la columna no son también almacenados en el índice.Si hicimos almacenar todas las otras columnas en el índice, entonces sería como crear otra copia de toda la tabla – que ocuparía demasiado espacio y sería muy ineficiente.

¿Cómo funciona una base de datos saber cuando usar un índice? Cuando una consulta "SELECT * FROM Empleado DONDE Employee_Name = 'Abc' " se ejecuta, la base de datos de verificación para ver si hay un índice en la columna(s) que se está consultando.Suponiendo que el Employee_Name columna tiene un índice creado en él, la base de datos tendrá que decidir si realmente tiene sentido usar el índice para encontrar los valores que se buscan, porque hay algunos escenarios en los que en realidad es menos eficiente en el uso de la base de datos de índice, y más eficaz justo para explorar toda la tabla.

¿Cuál es el costo de tener un índice de base de datos?

Ocupa espacio – y el más grande de su mesa, el más grande de su índice.Otro impacto en el rendimiento con los índices es el hecho de que en el momento de añadir, eliminar o actualizar filas en la tabla correspondiente, las mismas operaciones se tienen que hacer a su índice.Recuerde que un índice debe contener el mismo hasta el minuto de datos como lo es en la columna de la tabla(s) que el índice cubre.

Como regla general, un índice sólo se debe crear en una tabla si los datos en la columna indizada se consulta con frecuencia.

Ver también

  1. Lo columnas generalmente buenos índices?
  2. Cómo hacer la base de datos de índices de trabajo

Descripción Simple!!!!!!!!!!

El índice no es sino una estructura de datos que almacena los valores de una columna específica en una tabla.Se crea un índice en una columna de una tabla.

Ejemplo, tenemos una tabla de base de datos llamado de Usuario con tres columnas: Nombre, Edad y Dirección.Suponga que la tabla de Usuario tiene miles de filas.

Ahora, supongamos que queremos ejecutar una consulta para encontrar todos los detalles de los usuarios que se denomina 'Juan'.Si ejecutamos la siguiente consulta.

SELECT * FROM User 
WHERE Name = 'John'

El software de base de datos sería, literalmente, tiene que mirar en cada fila en la tabla de Usuario para ver si el Nombre de esa fila es 'John'.Esto va a tomar mucho tiempo.
Aquí es donde el índice nos ayuda a "índice se utiliza para acelerar las consultas de búsqueda esencialmente por la reducción del número de registros o filas en una tabla que necesita ser examinado".
Cómo crear un índice

CREATE INDEX name_index
ON User (Name)

Un índice se compone de los valores de la columna(por ejemplo:Juan) de una tabla, y que esos valores son almacenados en una estructura de datos.
Así que ahora la base de datos va a utilizar el índice para encontrar a los empleados de nombre Juan, ya que el índice presumiblemente serán ordenados alfabéticamente por el nombre de los Usuarios.Y, porque es ordenado, significa la búsqueda de un nombre es mucho más rápido porque todos los nombres que empiezan con "J" será uno al lado del otro en el índice!

Sólo una sugerencia..Como la indexación de los costos adicionales que la escribe y espacio de almacenamiento, por lo que si su aplicación requiere una mayor operación de inserción/actualización, puede que desee utilizar las tablas sin índices, pero si requiere más datos de las operaciones de recuperación, usted debe ir para la tabla indizada.

Sólo pensar en la Base de datos de Índice de Índice de un libro.Si usted tiene un libro sobre perros y usted desea encontrar información acerca de digamos, Pastores alemanes, usted podría, por supuesto, navegar a través de todas las páginas del libro y encontrar lo que están buscando, pero por supuesto, esto es mucho tiempo y no muy rápido.Otra opción es que, sólo podía ir a la sección de Índice del libro y, a continuación, encontrar lo que están buscando con el Nombre de la entidad que usted está buscando ( en este ejemplo, los Pastores alemanes), y el número de la página para encontrar rápidamente lo que están buscando.En la Base de datos, el número de página que se conoce como un puntero que se dirige a la base de datos a la dirección que aparece en el disco en el que la entidad se encuentra.Utilizando el mismo Pastor alemán analogía, podríamos tener algo como esto ("Pastor alemán", 0x77129) donde 0x77129 es la dirección en la disco, donde los datos de la fila para el Pastor alemán es almacenado.

En definitiva, un índice es una estructura de datos que almacena los valores de una columna específica en una tabla con el fin de acelerar la consulta de búsqueda.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top