rendimiento rapidas plan optimizar optimización mejorar mas inner ejecución datos consultas sql sql-server database-design

rapidas - optimizar inner join sql server



¿Qué son los índices y cómo puedo usarlos para optimizar las consultas en mi base de datos? (9)

Esta pregunta ya tiene una respuesta aquí:

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.

Siempre escuché que se puede "agregar un índice" 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 necesito un índice 101.

¿Alguien puede darme recursos para que pueda aprender?


¡Más información de í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 mencionado anteriormente. 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 lo que 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.


Como regla general, los índices deben estar en cualquier campo que use en las 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 de un índice que es por qué no tiene sentido intentar indexar un campo de bit).

Si su estructura ha creado claves primarias formalmente (lo que debería hacer, nunca creo una tabla sin una clave primaria), éstas 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.


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 n. ° 1 para determinar qué está haciendo su base de datos 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.


Los índices es un método que utilizan los sistemas de bases de datos para encontrar datos rápidamente. 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 forma 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.


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)


Piense en un índice similar a un 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.


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 la búsqueda binaria (u otra forma optimizada de búsqueda), en lugar de mirar 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 funcionará su consulta (para db2, es db2expln, algo similar probablemente para sqlserver), y una herramienta para sugerir índices y otras optimizaciones (db2advis para db2, de nuevo probablemente algo similar para sqlserver).


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).


para mssql (y tal vez otros) la sintaxis se ve así:

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