indicessqlserver 26-06.ppt

17
Índices Los índices son objetos de base de datos diseña para mejorar el rendimiento de las consultas. Arquitectura de los índices Los índices están estructurados para facil respuesta rápida de un conjunto de resultados. Los dos tipos de índices que SQL Server soporta agrupados y no agrupados. Los índices son aplic a una o más columnas en tablas o vista indexadas son soportadas por todas las edicione SQL Server !!"# y vistas indexadas son soporta por las ediciones SQL Server $ntreprise y SQL S %eveloper. Las características de un índice afe uso de los recursos del sistema y performance general. $l Query &ptimi'er usará un índi mejorará la performance de la consulta.

Transcript of indicessqlserver 26-06.ppt

  • ndicesLos ndices son objetos de base de datos diseados para mejorar el rendimiento de las consultas.

    Arquitectura de los ndices Los ndices estn estructurados para facilitar una respuesta rpida de un conjunto de resultados. Los dos tipos de ndices que SQL Server soporta son agrupados y no agrupados. Los ndices son aplicados a una o ms columnas en tablas o vistas. Tablas indexadas son soportadas por todas las ediciones de SQL Server 2005, y vistas indexadas son soportadas por las ediciones SQL Server Entreprise y SQL Server Developer. Las caractersticas de un ndice afecta el uso de los recursos del sistema y performance general. El Query Optimizer usar un ndice si este mejorar la performance de la consulta.

  • Propsito y estructura .-Un ndice en SQL Server asiste al motor de base de datos en la ubicacin de los registros, tal como un ndice en un libro ayuda a ubicar informacin rpidamente. Sin ndices, una consulta deber buscar en todos los registros de la tabla en orden a encontrar coincidencias. Un ndice de base de datos acta sobre una o ms columnas de valores de la tabla (llamadas clave del ndice) y punteros a los correspondientes registros de la tabla. Cuando se ejecuta una consulta usando la clave del ndice, el Query Optimizer utilizar el ndice para ubicar los registros que cumplen con la consulta.Un ndice es estructurado por el SQL Server Index manager como un rbol balanceado (B-tree).

  • Un B-tree es anlogo a un rbol invertido con la raz del rbol arriba, y los niveles hoja abajo, con niveles medios entre ambos. Cada objeto en la estructura de rbol es un grupo de claves del ndice ordenadas llamadas pginas del ndice.Para un rendimiento ptimo, se crean sobre columnas que son comnmente usadas en las consultas. Por ejemplo, los usuarios pueden consultar la tabla de Clientes en base al apellido o al ID del cliente. Por lo tanto se deberan crear dos ndices para la tabla: un ndice por apellido y otro por ID del cliente. Para ubicar eficientemente a los registros, el Query Optimizer usa un ndice que concuerde con la consulta. El Query Optimizer usar el ndice por el ID del cliente cuando se ejecute la siguiente consulta:SELECT * FROM Clientes WHERE Cliente_ID = 798

  • Tipos de ndices .-Hay dos tipos de ndices: Agrupados (clustered) y No agrupados (non clustered).

    Ambos tipos de ndices son estructuras tipo B-tree. Un ndice agrupado contiene los registros de la tabla a nivel hoja del B-tree. Un ndice no agrupado es una estructura de ndice separada, independiente del ordenamiento fsico de los registros en la tabla. Si existe un ndice agrupado en un tabla, un ndice no agrupado utilizar al ndice agrupado para la bsqueda de los registros. En la mayora de los casos se crear antes un ndice agrupado que los ndices no agrupados sobre una tabla.

  • ndices agrupados:Puede haber solo un ndice agrupado por tabla o vista, dado que estos ndices ordenan fsicamente la tabla o vista segn la clave del ndice agrupado. Este tipo de ndices es particularmente eficiente para consultas, dado que los registros de datos completos (en pginas de datos) son guardados a nivel de hoja del B-tree.

    El ordenamiento y la ubicacin de los datos en un ndice agrupado es anlogo al de un diccionario donde las palabras son ordenadas en forma alfabtica y las definiciones aparecen junto a las palabras.

  • Para forzar el tipo de ndice a ser creado para una columna o columnas, se puede especificar las clusulas CLUSTERED o NONCLUSTERED en los comandos CREATE TABLE, ALTER TABLE o CREATE INDEX. Suponga que se crea una tabla Personas que contiene las siguientes columnas: PersonaID, Nombre, Apellido y NumDocumento. La columna PersonID se define con la restriccin PRIMARY KEY, la columna NumDocumento con la restriccin UNIQUE. Para hacer un ndice agrupado para la columna NumDocumento y un ndice no agrupado para la columna PersonID, se crea la tabla usando la siguiente sintaxis:CREATE TABLE dbo.Personas ( PersonID smallint PRIMARY KEY NONCLUSTERED, Nombre varchar(39), Apellido varchar(40), NumDocumento char(11) UNIQUE CLUSTERED )

  • ndices no agrupados:

    Sobre una tabla o vista se pueden crear 250 ndice no agrupados o 249 ndices no agrupados y un ndice agrupado. Se debe primero crear un ndice nico agrupado sobre una vista previo a crear los ndices no agrupados.

    Un ndice no agrupado es anlogo a un ndice al final de un libro. Se puede usar el ndice del libro para ubicar las pginas que contienen una tema del ndice del libro. La base de datos usa los ndices no agrupados para encontrar registros segn una clave.

  • VentajasLa utilizacin de ndices puede mejorar el rendimiento de las consultas, ya que los datos necesarios para satisfacer las necesidades de la consulta existen en el propio ndice. Es decir, slo se necesitan las pginas de ndice y no las pginas de datos de la tabla o el ndice agrupado para recuperar los datos solicitados; por tanto, se reduce la E/S global en el disco. Por ejemplo, una consulta de las columnasaybde una tabla que dispone de un ndice compuesto creado en las columnasa,bycpuede recuperar los datos especificados del propio ndice.

    Los ndices en vistas pueden mejorar de forma significativa el rendimiento si la vista contiene agregaciones, combinaciones de tabla o una mezcla de agregaciones y combinaciones.

  • InconvenientesLas tablas utilizadas para almacenar los ndices ocupan espacio.Los ndices consumen recursos ya que cada vez que se realiza una operacin de actualizacin, insercin o borrado en la tabla indexada, se tienen que actualizar todas las tablas de ndice definidas sobre ella (en la actualizacin slo es necesaria la actualizacin de los ndices definidos sobre las columnas que se actualizan).Por estos motivos no es buena idea definir ndices indiscriminadamente.

  • Consideraciones a tener en cuentaA la hora de definir ndices se deben de tener en cuenta estas consideraciones:Hay que evitar crear demasiados ndices en tablas que se actualizan con mucha frecuencia y procurar definirlos con el menor nmero de columnas posible.Es conveniente utilizar un nmero mayor de ndices para mejorar el rendimiento de consultas en tablas con pocas necesidades de actualizacin, pero con grandes volmenes de datos. Un gran nmero de ndices contribuye a mejorar el rendimiento de las consultas que no modifican datos, como las instrucciones SELECT, ya que el optimizador de consultas dispone de ms ndices entre los que elegir para determinar el mtodo de acceso ms rpido.

  • La indizacin de tablas pequeas puede no ser una solucin ptima, porque puede provocar que el optimizador de consultas tarde ms tiempo en realizar la bsqueda de los datos a travs del ndice que en realizar un simple recorrido de la tabla.Se recomienda utilizar una longitud corta en la clave de los ndices agrupados. Los ndices agrupados tambin mejoran si se crean en columnas nicas o que no admitan valores NULL.Hay que tener en cuenta el orden de las columnas si el ndice va a contener varias columnas. La columna que se utiliza en la clusula WHERE en una condicin de bsqueda igual a (=), mayor que (>), menor que (
  • Ejemplos:CREATE INDEX I_clientes_nombre ON Clientes (nombre) Crea un ndice no agrupado sobre la columna nombre de la tabla Clientes en la base de datos actual, las filas se ordenarn de forma ascendente.

    CREATE INDEX I_clientes_ApeNom ON Clientes (apellidos, nombre) Crea un ndice no agrupado sobre las columnas apellidos y nombre de la tabla Clientes en la base de datos actual, las filas se ordenarn de forma ascendente por apellido y dentro del mismo apellido por nombre.

    CREATE INDEX I_clientes_EdadApe ON Clientes (edad DESC,apellidos) Crea un ndice no agrupado sobre las columnas edad y apellidos de la tabla Clientes en la base de datos actual, las filas se ordenarn de forma descendente por edad y ascendente por apellido. Aparecern los clientes de mayor a menor edad y los clientes de la misma edad se ordenarn por apellido (por orden alfabtico).

  • CREATE CLUSTERED INDEX I_clientes_cod ON Clientes (codigo) Crea un ndice agrupado sobre la columna codigo de la tabla Clientes en la base de datos actual, las filas se ordenarn y almacenarn por orden de cdigo.

    CREATE UNIQUE INDEX U_clientes_col ON Clientes (col) Crea un ndice nico sobre la columna col de la tabla Clientes en la base de datos actual, la columna col no podr contener valores duplicados.

  • Eliminar un ndice DROP INDEX

    Para eliminar un ndice tenemos la sentencia DROP INDEX. La instruccin DROP INDEX no es aplicable a los ndices creados mediante la definicin de restricciones PRIMARY KEY y UNIQUE. Para quitar la restriccin y el ndice correspondiente, se tiene que ejecutar un ALTER TABLE con la clusula DROP CONSTRAINT.

  • Sintaxis simplificada:

    DROP INDEX [ ,...n ] [ ; ] ::= { nbindice ON [nbBaseDatos.[nbEsquema].|nbEsquema.]nbTablaVista }nbBaseDatosEs el nombre de la base de datos. nbEsquemaEs el nombre del esquema al que pertenece la tabla/vista. nbTablaVistaEs el nombre de la tabla o vista de la que se quiere eliminar el ndice. nbindice Es el nombre del ndice a eliminar.Ejemplo:DROP INDEX U_clientes_col ON Clientes; Elimina el ndiceU_clientes_coldefinido sobre la tabla Clientes.

  • ACTIVIDAD GRUPAL

    Hacer un mapa conceptual de la presente diapositiva y hacer 3 ejemplos de ndices.

    * Mximo grupos de 5 personas.