2008-09-19 11 views
29

Estoy manteniendo una aplicación y una base de datos bastante importantes y estoy notando un rendimiento deficiente de la base de datos en algunos de nuestros procedimientos almacenados.¿Qué son los índices y cómo puedo usarlos para optimizar las consultas en mi base de datos?

Siempre he escuchado que "agregar un índice" se puede hacer para ayudar al rendimiento. Ciertamente no soy un DBA, y no entiendo qué son los índices, por qué ayudan y cómo crearlos.

básicamente me falta un programa índices 101.

Puede alguien darme los recursos para que pueda aprender?

+6

@mmattax, debe aceptar una de las respuestas aquí, hay varias realmente buenas –

Respuesta

5

Un índice básicamente ordena sus datos en las columnas dadas y luego almacena ese orden, por lo que cuando quiere encontrar un artículo, la base de datos puede optimizar utilizando búsqueda binaria (u otra forma optimizada de búsqueda), en lugar de buscar en cada fila individual.

Por lo tanto, si la cantidad de datos que está buscando es grande, definitivamente querrá agregar algunos índices.

La mayoría de las bases de datos tienen una herramienta para explicar cómo funciona su consulta (para db2, es db2expln, algo similar probablemente para sqlserver), y una herramienta para sugerir índices y otras optimizaciones (db2advis para db2, otra vez algo similar para sqlserver)

+0

La mayoría de las bases de datos SQL implementan alguna variante de "EXPLAIN " para generar un plan de consulta. En PostgreSQL, "EXPLAIN ANALYZE " ejecuta, además, la consulta y los tiempos de cada parte. –

1

Un índice se puede explicar como una lista ordenada de los elementos en un registro. Es muy rápido buscar la posición del artículo en el registro, buscando su clave en el índice. Luego, la tecla en el índice es un puntero a la posición en el registro donde se puede encontrar el resto del registro.

Puede tener muchos índices en un registro, pero cuanto más tenga, más lenta será la inserción de nuevos registros (porque cada índice también necesita un nuevo registro, en un orden ordenado, que también agrega tiempo).

23

Piense en un índice similar al catálogo de tarjetas en la biblioteca. Un índice evita que tenga que buscar en cada isla o estante de un libro. En cambio, es posible que pueda encontrar los elementos que desea de un campo comúnmente utilizado, como ID, Nombre, etc. Cuando crea un índice, la base de datos básicamente crea algo separado para que una consulta pueda pulsar en lugar de escanear toda la tabla . Acelera la consulta permitiéndole buscar un subconjunto más pequeño de datos o un conjunto optimizado de datos.

+0

Una descripción buena y genérica de los índices b * tree. –

1

Los índices se crean en una tabla existente para ubicar las filas de manera más rápida y eficiente. Es posible crear un índice en una o más columnas de una tabla, y cada índice recibe un nombre. Los usuarios no pueden ver los índices, solo se utilizan para acelerar las consultas.

Básicamente, su DBMS creará una especie de estructura de árbol que apunta a los datos (de una columna) de una manera ordenada. De esta forma, es más fácil buscar datos en esa (s) columna (s).

http://en.wikipedia.org/wiki/Index_(database)

+0

Enlace correcto: http://en.wikipedia.org/wiki/Index_(database) –

+0

He reparado el enlace en la pregunta –

4

índices es un método que utilizan los sistemas de bases de datos para encontrar rápidamente los datos. La analogía del mundo real son índices en libros. Si un autor/editor hace un buen trabajo al indexar su libro, resulta bastante fácil para el lector ir directamente a la página que quiere leer simplemente mirando el índice. Lo mismo vale para una base de datos. Si se crea un índice en un campo, la base de datos preordena los datos. Cuando se realiza una solicitud sobre los datos, la base de datos usa el índice para identificar en qué ubicación se almacenan los datos en el disco duro, y va directamente allí. Si no hay índices, la base de datos debe examinar cada registro para saber si cumple con los criterios de su consulta.

Una manera simple de ver los índices es pensar en una baraja de cartas. Una base de datos que no está indexada es como un mazo de cartas que se han barajado. Si quieres encontrar al rey de las espadas, debes mirar cada carta una por una para encontrarla. Puede ser afortunado y puede ser el primero, o puede ser desafortunado y puede ser el último.

Una base de datos que está indexada, tiene todas las cartas en el mazo ordenadas de as a rey y cada suite está separada en su propio montón. Buscar el rey de las espadas es mucho más simple ahora porque simplemente necesitas mirar la parte inferior de la pila de cartas que contiene las espadas.

Espero que esto ayude. Sin embargo, ten en cuenta que aunque los índices son necesarios en un sistema de base de datos relacional, pueden contraproducentes si escribes demasiados. Hay una gran cantidad de excelentes artículos en la web que puede leer en los índices. Sugiero leer un poco antes de sumergirte en ellos.

+0

+1 mejor explicación aquí @ user2013 – Ozzy

+0

: D Me encanta. Gracias. – abhisekp

0

para mssql (y quizás otros) la sintaxis es la siguiente:

create index <indexname> on <tablename>(<column1>[,<column2>...]) 
1

Parte de la información más índice!

Los índices agrupados son el diseño físico real de los registros en la tabla. Por lo tanto, solo puede tener uno por mesa.

Los índices no agrupados son el catálogo de tarjetas antes mencionado. Claro, los libros están organizados en un orden particular, pero puede organizar las tarjetas en el catálogo por tamaño de libro, o quizás por número de páginas, o por apellido alfabético.

Algo en qué pensar, crear demasiados índices es una trampa común. Cada vez que se actualizan sus datos, su DB debe buscar a través de ese índice y actualizarlo, insertando un registro en cada índice de esa tabla para esa nueva fila. En los sistemas transaccionales (¡piense en las transacciones bursátiles de la Bolsa de Nueva York!) Que podría ser un asesino de aplicaciones.

29

Como regla general, los índices deben estar en cualquier campo que use en cláusulas join o where (si tienen suficientes valores diferentes para hacer que valga la pena usar un índice, el campo con solo unos pocos valores posibles no se beneficia un índice por el cual no tiene sentido intentar indexar un campo de bit).

Si su estructura ha creado formalmente claves primarias (lo que debería, nunca creo una tabla sin una clave primaria), estas se indexan por definición porque se requiere una clave primaria para tener un índice único en ella. La gente a menudo olvida que tienen que indexar las claves externas porque no se crea automáticamente un índice cuando configura la relación de la clave externa. Dado que el objetivo de una clave externa es proporcionarle un campo para unirse, la mayoría de las claves externas probablemente deberían estar indexadas.

Los índices una vez creados deben mantenerse. Si tiene una gran cantidad de actividad de cambio de datos, pueden fragmentarse y ralentizar el rendimiento, y deben actualizarse. Lea en libros en línea sobre índices. También puede encontrar la sintaxis para crear la declaración de índice allí.

Los índices son un acto de equilibrio, cada índice que agregue generalmente agregará tiempo a las inserciones, actualizaciones y eliminaciones de datos, pero puede acelerar las selecciones y uniones en inserciones, actualizaciones y eliminaciones complejas. No hay una sola fórmula para cuáles son los mejores índices, aunque la regla general anterior es un buen lugar para comenzar.

+2

Podría * valer la pena indexar una columna de bit si el valor que está buscando va a ser escaso en su índice. Si tiene un millón de filas y solo unas pocas centenas tienen un valor de bit de 1 y eso es lo que está buscando, entonces un índice ayudará. No son * los valores posibles * son los * valores reales * almacenados en su base de datos que son relevantes para determinar si el índice es útil. En contraste: si tiene una columna varchar (100) pero todos los valores reales son los mismos, los índices son inútiles en esa columna. –

3

Como se indicó anteriormente, puede tener un índice agrupado y múltiples índices no agrupados.En SQL 2005, también puede agregar columnas adicionales a un índice no agrupado, lo que puede mejorar el rendimiento donde algunas columnas comúnmente recuperadas se incluyen con el índice pero no forman parte de la clave, lo que elimina por completo el viaje a la mesa.

Su herramienta # 1 para determinar qué está haciendo su base de datos de SQL Server es el generador de perfiles. Puede perfilar cargas de trabajo completas y luego ver qué índices recomienda. También puede consultar los planes de ejecución para ver qué efectos tiene un índice.

El problema de los índices demasiados se debe a la escritura en una base de datos y a tener que actualizar todos los índices que tendrían un registro para esa fila. Si tiene rendimiento de lectura, probablemente no se deba a demasiados índices, sino a que son demasiado pocos o demasiado inadecuados.

Cuestiones relacionadas