Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Contenido
Introduccin Creacin de ndices Opciones de creacin de ndices Mantenimiento de ndices Introduccin a las estadsticas Consultas en la tabla sysindexes Configuracin de ndices mediante el Asistente para optimizacin de ndices Consideraciones acerca del rendimiento
1 2 11 16 25 36 38 41
Introduccin
Objetivo del tema
Proporcionar una introduccin a los temas y objetivos del mdulo.
Creacin de ndices Opciones de creacin de ndices Mantenimiento de ndices Introduccin a las estadsticas Consultas en la tabla sysindexes Configuracin de ndices mediante el Asistente para optimizacin de ndices Consideraciones acerca del rendimiento
Explicacin previa
Al programar una base de datos, desear crear ndices tiles que le permitan obtener un rpido acceso a los datos. Con Microsoft Windows 2000, puede crear y mantener ndices y estadsticas. Cuando se utiliza el Asistente para optimizacin de ndices, Microsoft SQL Server 2000 crea ndices, analiza las consultas y determina los ndices que se deben crear. Despus de completar este mdulo, el alumno ser capaz de: Crear ndices y vistas indizadas con caractersticas de unicidad o composicin. Utilizar las opciones de CREATE INDEX Describir cmo mantener ndices a lo largo del tiempo. Describir cmo el optimizador de consultas crea, almacena, mantiene y utiliza estadsticas para optimizar consultas. Consultar la tabla sysindexes Describir cmo funciona el Asistente para optimizacin de ndices y cundo se debe utilizar. Describir los aspectos relacionados con el rendimiento que afectan a la creacin y mantenimiento de ndices.
Creacin de ndices
Objetivo del tema
Presentar los temas acerca de la creacin de ndices.
Explicacin previa
Creacin y eliminacin de ndices Creacin de ndices nicos Creacin de ndices compuestos Creacin de ndices en columnas calculadas Obtencin de informacin acerca de los ndices existentes
Ahora que se ha familiarizado con las distintas arquitecturas de ndices, veamos cmo crear ndices y obtener informacin acerca de los ndices existentes.
Ahora que se ha familiarizado con las distintas arquitecturas de ndices, explicaremos cmo crear y eliminar ndices, y cmo obtener informacin acerca de los ndices existentes.
Uso de la instruccin CREATE INDEX Los ndices se crean automticamente en tablas con las restricciones PRIMARY KEY o UNIQUE Los ndices pueden crearse en vistas si cumplen ciertos requisitos
USE Northwind USE Northwind CREATE CLUSTERED INDEX CL_lastname CREATE CLUSTERED INDEX CL_lastname ON employees(lastname) ON employees(lastname)
Explicacin previa
Los ndices se crean con la instruccin CREATE INDEX y se pueden quitar con la instruccin DROP INDEX.
Los ndices se crean con la instruccin CREATE INDEX y se pueden quitar con la instruccin DROP INDEX. Nota Para ejecutar cualquiera de estas instrucciones en una base de datos, es necesario ser el propietario de la tabla.
Utilice ndices de tamao reducido; para ello, defnalos con columnas de pequeo tamao. Normalmente, los ndices pequeos son ms eficientes que los que tienen valores de clave mayores. Seleccione las columnas por su unicidad, de forma que cada valor de clave identifique un nmero pequeo de filas. Al crear un ndice agrupado se vuelven a generar todos los ndices no agrupados existentes. Sintaxis CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX nombrendice ON { tabla | vista } ( columna [ ASC | DESC ] [ ,...n ] ) [WITH [PAD_INDEX ] [[,] FILLFACTOR = factorDeRelleno ] [[,] IGNORE_DUP_KEY ] [[,] DROP_EXISTING ] [[,] STATISTICS_NORECOMPUTE ] [[,] SORT_IN_TEMPDB ] ] [ON grupoDeArchivos ] En este ejemplo se crea un ndice agrupado con la columna Lastname de la tabla Employees.
CREATE CLUSTERED INDEX CL_lastname ON employees(lastname)
Ejemplo 1
Customers Customers
CustomerID CustomerID QUICK QUICK BONAP BONAP 12 RANCH 12 CompanyName ContactName CompanyName ContactName QUICK-Stop QUICK-Stop Bon app' Bon app' Walking Rancho grande Walking Horst Kloss Horst Kloss Laurence Lebihan Laurence Lebihan Henry Gutirrez Sergio David Thoreau Henry David Thoreau
Explicacin previa
En un ndice nico no se permite que dos filas tengan el mismo valor de clave.
Los valores de clave duplicados no Los valores de clave duplicados no se permiten cuando se agrega a la se permiten cuando se agrega a la tabla una fila nueva tabla una fila nueva RANCH Sant Gourmet Jonas Bergulfsen RANCH Sant Gourmet Jonas Bergulfsen
Un ndice nico asegura que todos los datos de una columna indizada sean nicos y que no haya valores duplicados. Los ndices nicos aseguran que los datos de las columnas indizadas son nicos. Si la tabla tiene una restriccin PRIMARY KEY o UNIQUE, SQL Server crea automticamente un ndice nico al ejecutar la instruccin CREATE TABLE o ALTER TABLE.
Cmo asegurar que los datos de las columnas indizadas son nicos
Puede crear un ndice nico, ya sea agrupado o no agrupado, cuando los propios datos sean inherentemente nicos. Sin embargo, si es necesario exigir la unicidad, es preferible crear restricciones PRIMARY KEY o UNIQUE que crear un ndice nico. Al crear un ndice nico, tenga en cuenta los siguientes hechos e instrucciones: SQL Server crea automticamente ndices nicos basados en las columnas de la tabla definidas con las restricciones PRIMARY KEY o UNIQUE. Si una tabla contiene datos, SQL Server comprueba si hay valores duplicados al crear el ndice. SQL Server comprueba si hay valores duplicados cada vez que se utiliza la instruccin INSERT o UPDATE. Si hay valores de clave duplicados, SQL Server cancela la instruccin y genera un mensaje de error con el primer duplicado. Asegrese de que cada fila tenga un valor nico; no puede haber dos filas con el mismo nmero de identificacin si se crea un ndice nico basado en esa columna. Esta norma asegura que cada entidad se pueda identificar de forma nica. Slo debe crear ndices nicos en las columnas en las que pueda exigirse la integridad. Por ejemplo, no es conveniente crear un ndice nico en la columna LastName de la tabla Employees, ya que puede haber varios miembros con los mismos apellidos.
Ejemplo 1
En este ejemplo se crea un ndice nico no agrupado llamado U_CustID en la tabla Customers. El ndice se basa en la columna CustomerID. El valor de la columna CustomerID debe ser nico para cada fila de la tabla.
USE Northwind CREATE UNIQUE NONCLUSTERED INDEX U_CustID ON customers(CustomerID)
Ejemplo 2
Este ejemplo determina si hay identificaciones de cliente duplicadas en la columna CustomerID de la tabla Customers. En caso de que las haya, SQL Server devuelve la identificacin de cliente y el nmero de entradas duplicadas en el conjunto de resultados.
SELECT CustomerID, COUNT(CustomerID) AS '# of Duplicates' FROM Northwind.dbo.Customers GROUP BY CustomerID HAVING COUNT(CustomerID)>1 ORDER BY CustomerID
Resultado
# of Duplicates
Explicacin previa
Columna 1
Columna 2
Sugerencia
Seale que la columna OrderID es la primera por ser ms selectiva que la columna ProductID.
Los ndices compuestos especifican ms de una columna como valor de clave. Puede crear ndices compuestos: Cuando resulte mejor buscar claves formadas por dos o ms columnas. Si las consultas slo hacen referencia a las columnas del ndice. Por ejemplo, una gua telefnica es un buen ejemplo de utilidad de un ndice compuesto. La gua est ordenada por apellidos. En cada apellido, la ordenacin es por nombres, ya que a menudo hay entradas con los mismos apellidos. Al crear un ndice compuesto, tenga en cuenta los siguientes hechos e instrucciones: Es posible combinar hasta 16 columnas en un mismo ndice compuesto. La suma de las longitudes de las columnas que forman el ndice no puede superar 900 bytes. Todas las columnas de un ndice compuesto deben proceder de la misma tabla, excepto cuando el ndice se crea en una vista. Defina en primer lugar la columna con mayor unicidad. La primera columna definida en la instruccin CREATE INDEX se conoce como columna de orden superior. La clusula WHERE de una consulta debe hacer referencia a la primera columna del ndice compuesto para que el optimizador de consultas lo utilice. Un ndice basado en (columna1, columna2) no es igual a uno basado en (columna2, columna1): cada uno tiene un orden de columnas distinto. La columna que contenga datos ms selectivos o que devuelva el menor porcentaje de filas determina, a menudo, el orden de las columnas.
Los ndices compuestos son tiles para las tablas con claves de varias columnas. Puede utilizar ndices compuestos para mejorar el rendimiento de las consultas y reducir el nmero de ndices creados en una tabla. Nota Normalmente, no es til tener varios ndices basados en las mismas columnas. Ejemplo En este ejemplo se crea un ndice compuesto no agrupado basado en la tabla Order Details. Las columnas OrderID y ProductID son los valores de clave compuesta. Observe que la columna OrderID aparece en primer lugar por ser ms selectiva que la columna ProductID.
USE Northwind CREATE UNIQUE NONCLUSTERED INDEX U_OrdID_ProdID ON [Order Details] (OrderID, ProductID)
Es posible crear ndices en columnas calculadas cuando se dan las siguientes circunstancias:
La expresin de la columna calculada es determinista y precisa La opcin de conexin ANSI_NULL est activada La columna calculada no puede evaluar los tipos de datos text, ntext o image Las opciones SET requeridas se activan cuando crea el ndice y cuando las instrucciones INSERT, UPDATE o DELETE cambian el valor del ndice Se desactiva la opcin NUMERIC_ROUNDABORT
Explicacin previa
Para poder crear un ndice en una columna calculada, es necesario cumplir ciertos requisitos.
Para su informacin
Seale que los Libros en pantalla de SQL Server contienen informacin adicional acerca de las funciones deterministas y no deterministas.
Es posible crear ndices en columnas calculadas cuando se dan las siguientes circunstancias: La expresin de la columna calculada es determinista. Las expresiones deterministas siempre devuelven el mismo resultado. La opcin de conexin ANSI_NULL est activada cuando se ejecuta la instruccin CREATE TABLE. La funcin OBJECTPROPERTY informa de que la opcin est activada a travs de la propiedad IsAnsiNullsOn. La expresin de columna calculada que se define para la columna calculada no puede evaluar los tipos de datos text, ntext o image.
Para su informacin
Seale que los Libros en pantalla de SQL Server contienen informacin adicional acerca de las opciones SET que afectan a los resultados.
La conexin en la que se crea el ndice y todas las conexiones que intentan instrucciones INSERT, UPDATE o DELETE que van a cambiar valores del ndice tienen seis opciones SET activadas y una desactivada. Las opciones siguientes deben estar activadas: ANSI_NULLS ANSI_PADDING ANSI_WARNINGS ARITHABORT CONCAT_NULL_YIELDS_NULL QUOTED_IDENTIFIER Adems de estas opciones activadas, la opcin NUMERIC_ROUNDABORT debe estar desactivada. Nota El optimizador de consultas omite un ndice basado en una columna calculada en cualquier instruccin SELECT que se ejecute con una conexin que no tiene esa misma configuracin de opciones.
10
Explicacin previa
Antes de crear, modificar o quitar un ndice puede ser necesario obtener informacin acerca de los ndices existentes.
Antes de crear, modificar o quitar un ndice puede ser necesario obtener informacin acerca de los ndices existentes.
Resultado
index_name PK_Customers PostalCode City (1 filas afectadas) index_description index_keys clustered, unique, Primary Key located on PRIMARY CustomerID nonclustered located on PRIMARY PostalCode nonclustered located on PRIMARY City
Muestre el conjunto de resultados de sp_help nombreTabla; para ello, ejecute lo siguiente: USE Northwind EXEC sp_help Customers Seale la informacin adicional de la tabla.
Sugerencia
11
Explicacin previa
SQL Server ofrece opciones de creacin de ndices que pueden acelerar este proceso y, tambin, mejorar su rendimiento a lo largo del tiempo.
SQL Server ofrece opciones de creacin de ndices que pueden acelerar este proceso y, tambin, mejorar su rendimiento a lo largo del tiempo.
12
Especifica cunto debe llenarse la pgina Afecta a las pginas del nivel de hoja
Pginas de datos llenas
Con Funk White Rudd White Barr ... 470401 ... 470402 ... 470403 ... 470501 ... 470502 ... 470503 Akhtar Funk Smith Martin Smith Ota ... 470601 ... 470602 ... 470603 ... 470604 ... 470701 ... 470702 Martin Phua Jones Smith Ganio Jones ... 470801 ... 470802 ... 470803 ... 470804 ... 470901 ... 470902
Explicacin previa
Puede utilizar la opcin FILLFACTOR para optimizar el rendimiento de las instrucciones INSERT y UPDATE en las tablas que contienen ndices agrupados o no agrupados.
Puede utilizar la opcin FILLFACTOR para optimizar el rendimiento de las instrucciones INSERT y UPDATE en las tablas que contienen ndices agrupados o no agrupados. Cuando se llena una pgina de ndice, SQL Server debe dedicar tiempo a dividirla para dejar sitio a las nuevas filas. Con la opcin FILLFACTOR se asigna un porcentaje de espacio libre en las pginas de ndice del nivel de hoja para reducir la divisin de las pginas. Nota La opcin FILLFACTOR slo se aplica cuando se crea o se vuelve a generar el ndice. SQL Server no mantiene dinmicamente el porcentaje de espacio asignado especificado en las pginas de ndice. El valor de FILLFACTOR que se debe especificar en una tabla depende de la frecuencia con que se modifiquen los datos (instrucciones INSERT y UPDATE) y del entorno de la organizacin. En general, debe hacer lo siguiente: Utilice un valor de FILLFACTOR pequeo en los entornos de proceso de transacciones en lnea (OLTP). Utilice un valor de FILLFACTOR grande en los entornos de Analysis Services de SQL Server.
13
La tabla siguiente muestra los valores de la opcin FILLFACTOR y los entornos en que se utilizan habitualmente.
Porcentaje de FILLFACTOR 0 (predeterm.) 199 Pginas del nivel de hoja Rellenar completamente Rellenar hasta el porcentaje especificado Rellenar completamente Pginas de niveles distintos del de hoja Dejar sitio para una entrada de ndice Dejar sitio para una entrada de ndice Dejar sitio para una entrada de ndice Actividad en los valores de clave Sin modificacin o modificaciones leves Modificaciones de moderadas a frecuentes Sin modificacin o modificaciones leves Entorno de trabajo habitual Analysis Services Mixto u OLTP
100
Analysis Services
Al utilizar la opcin FILLFACTOR, tenga en cuenta los siguientes hechos e instrucciones: Los valores de FILLFACTOR estn comprendidos entre el 1 y el 100 por cien. El valor de FILLFACTOR predeterminado es 0. Este valor llena las pginas de ndice del nivel de hoja al 100 por cien y deja sitio para el tamao mximo de una entrada de ndice en las pginas de ndice no situadas en el nivel de hoja. No puede especificar explcitamente un valor de FILLFACTOR = 0. El valor de FILLFACTOR predeterminado puede modificarse en el servidor mediante el procedimiento almacenado de sistema sp_configure. La tabla del sistema sysindexes almacena el valor de FILLFACTOR aplicado por ltima vez y otra informacin del ndice. El valor de FILLFACTOR se especifica en porcentajes. El porcentaje determina cunto deben llenarse las pginas del nivel de hoja. Por ejemplo, un valor de FILLFACTOR de 65 llena un 65 por ciento de cada pgina del nivel de hoja y deja libre un 35 por ciento del espacio de pgina para nuevas filas. El tamao de la fila influye en el nmero de filas que caben en la pgina para el porcentaje de FILLFACTOR especificado. Utilice la opcin FILLFACTOR en las tablas en las que se insertan muchas filas o cuando los valores de clave de un ndice agrupado se modifican con frecuencia.
14
La opcin PAD_INDEX se aplica a las pginas de ndice no situadas en el nivel de hoja Si no se especifica PAD_INDEX, el valor predeterminado deja espacio para una entrada de fila en las pginas no situadas en el nivel de hoja El nmero de filas en las pginas no situadas en el nivel de hoja nunca es menor que dos PAD_INDEX utiliza el valor de FILLFACTOR
USE Northwind USE Northwind CREATE INDEX OrderID_ind CREATE INDEX OrderID_ind ON Orders(OrderID) ON Orders(OrderID) WITH PAD_INDEX, FILLFACTOR=70 WITH PAD_INDEX, FILLFACTOR=70
Explicacin previa
Puede utilizar la opcin PAD_INDEX con la opcin FILLFACTOR para optimizar el rendimiento al crear o volver a generar un ndice.
Sugerencia
Seale que los alumnos utilizarn la opcin PAD_INDEX pocas veces. Se obtiene mayor rendimiento cuando se utiliza FILLFACTOR adecuadamente. Porcentaje de FILLFACTOR 199
La opcin PAD_INDEX especifica el porcentaje con que se deben llenar las pginas de ndice no situadas en el nivel de hoja. La opcin PAD_INDEX slo se puede usar cuando se especifica tambin FILLFACTOR, ya que el valor de porcentaje de PAD_INDEX est determinado por el especificado en FILLFACTOR. La tabla siguiente muestra el efecto de los valores de la opcin FILLFACTOR al utilizar la opcin PAD_INDEX, as como los entornos en los que suelen utilizarse los valores de PAD_INDEX.
Pginas de niveles distintos del de hoja Rellenar hasta el porcentaje especificado Actividad en los valores de clave Modificaciones de moderadas a frecuentes Entorno de trabajo habitual OLTP
Al utilizar la opcin PAD_INDEX, tenga en cuenta lo siguiente: SQL Server aplica el porcentaje especificado por la opcin FILLFACTOR tanto a las pginas del nivel de hoja como a las de otros niveles. De forma predeterminada, SQL Server deja siempre espacio suficiente para acomodar al menos una fila del tamao mximo del ndice en cada pgina que no est en el nivel de hoja, sin importar lo elevado que sea el valor de FILLFACTOR. El nmero de elementos de una pgina de ndice que no est en el nivel de hoja nunca es inferior a dos, sin importar lo bajo que sea el valor de FILLFACTOR. PAD_INDEX utiliza el valor de FILLFACTOR.
15
Ejemplo
En este ejemplo se crea el ndice OrderID_ind en la columna OrdersID de la tabla Orders. Al especificar la opcin PAD_INDEX con la opcin FILLFACTOR, SQL Server crea pginas de nivel de hoja y de niveles distintos que estn llenas en un 70 por ciento. Sin embargo, si no se utilizara la opcin PAD_INDEX, las pginas del nivel de hoja se llenaran en un 70 por ciento y las de otros niveles se llenaran casi completamente.
USE Northwind CREATE INDEX OrderID_ind ON Orders(OrderID) WITH PAD_INDEX, FILLFACTOR=70
16
Mantenimiento de ndices
Objetivo del tema
Proporcionar una breve introduccin a varias herramientas de mantenimiento.
Fragmentacin de los datos Instruccin DBCC SHOWCONTIG Instruccin DBCC INDEXDEFRAG Opcin DROP_EXISTING
Explicacin previa
Una vez creados los ndices, debe mantenerlos para asegurar que su rendimiento sea ptimo.
Una vez creados los ndices, debe mantenerlos para asegurar que su rendimiento sea ptimo. Con el tiempo, los datos se fragmentan. La fragmentacin de los datos debe administrarse en funcin del entorno de la organizacin. SQL Server proporciona el Asistente para optimizacin de ndices, que hace un seguimiento automtico del uso de los ndices, y ayuda a mantener y crear ndices con un rendimiento ptimo. Tambin puede utilizar diversas opciones y herramientas como ayuda para volver a generar los ndices y comprobar su optimizacin.
17
Explicacin previa
Con el tiempo, a medida que se modifican las tablas se produce la fragmentacin. Puede aplicar distintos mtodos para administrar la fragmentacin en funcin de su entorno de trabajo.
Entorno de trabajo
El grado de fragmentacin aceptable en una base de datos depende del entorno de trabajo: En un entorno OLTP, la fragmentacin puede ser beneficiosa, ya que las escrituras son frecuentes. Un sistema OLTP tpico tiene un gran nmero de usuarios simultneos que agregan y modifican datos continuamente. La fragmentacin puede ser perjudicial en un entorno de Analysis Services, ya que implica lecturas frecuentes.
18
Qu determina la instruccin DBCC SHOWCONTIG Si una tabla o un ndice estn muy fragmentados Si las pginas de datos o de ndices estn llenas Cundo ejecutar la instruccin DBCC SHOWCONTIG Si las tablas han sido muy modificadas Si las tablas contienen datos importados Si las tablas parecen provocar un bajo rendimiento en las consultas
Explicacin previa
Si le preocupa la fragmentacin, puede utilizar la instruccin DBCC SHOWCONTIG para averiguar si una tabla o sus ndices estn fragmentados.
Sugerencia
Muestre el uso de la instruccin DBCC SHOWCONTIG con una tabla de la base de datos ClassNorthwind y describa a grandes rasgos el resultado.
La instruccin DBCC SHOWCONTIG muestra informacin acerca de la fragmentacin de los datos e ndices de una tabla especfica.
Demuestre una de las dos maneras de obtener el identificador de una tabla. Una de ellas consiste en utilizar la funcin OBJECT_ID. La otra supone hacer una consulta de la tabla del sistema sysindexes de la base de datos ClassNorthwind.
19
En la tabla siguiente se describen las estadsticas que devuelve la instruccin DBCC SHOWCONTIG.
Estadstica Pginas recorridas Extensiones recorridas Cambios de extensin Promedio de pginas por extensin Densidad de recorrido [Cuenta ptima: Cuenta real] Descripcin Nmero de pginas en la tabla o el ndice. Nmero de extensiones en la tabla o el ndice. Nmero de veces que la instruccin DBCC ha salido de una extensin mientras recorra sus pginas. Nmero de pginas por extensin en la cadena de pginas. La densidad de recorrido es 100 (es un porcentaje) si todo es contiguo; si es inferior a 100, hay fragmentacin. La cuenta ptima es el nmero ideal de cambios de extensin que habra si todos los elementos fueran contiguos. La cuenta real es el nmero real de cambios de extensin. El porcentaje de pginas no ordenadas devueltas del recorrido de las pginas de hoja de un ndice. Este nmero no es relevante en montones e ndices de texto. Una pgina no ordenada es aquella para la que la siguiente pgina indicada en un Mapa de asignacin de ndices (IAM) es diferente a la sealada por el puntero de pgina siguiente en la pgina de hoja. El porcentaje de extensiones no ordenadas devueltas del recorrido de las pginas de hoja de un ndice. Este nmero no es relevante en montones. Una extensin no ordenada es aquella en la que la extensin que contiene la pgina actual de un ndice no corresponde a la extensin fsica siguiente (es decir, la extensin que va tras la que contiene la pgina anterior de un ndice). Nmero promedio de bytes libres en las pginas recorridas. Cuanto mayor sea este nmero, menos llenas estarn las pginas; son preferibles los nmeros bajos. Sin embargo, tenga presente que este nmero tambin se ve afectado por el tamao de fila. Un tamao de fila grande puede dar como resultado un nmero mayor. Valor que muestra hasta qu punto est llena una pgina. En l se considera el tamao de fila, por lo que es una indicacin ms precisa de lo llena que est la pgina. Los porcentajes altos son preferibles a los bajos.
Sintaxis
DBCC SHOWCONTIG [({nombreTabla | idTabla | nombreVista | idVista } [, nombrendice | idndice ] )] [ WITH { ALL_INDEXES | FAST [, ALL_INDEXES ] | TABLERESULTS [, { ALL_INDEXES } ] [, { FAST | ALL_LEVELS } ] } ]
20
Ejemplo
En este ejemplo se ejecuta una instruccin que tiene acceso a la tabla Customers.
USE Northwind DBCC SHOWCONTIG (Customers, PK_Customers)
Resultado
DBCC SHOWCONTIG recorriendo la tabla 'Customers'... Tabla: 'Customers' (2073058421); Id. de ndice: 1, Id. de base de datos: 6 Realizado recorrido de nivel TABLE. Pginas recorridas: 3 Extensiones recorridas: 2 Cambios de extensin: 1 Promedio de pginas por extensin: 1.5 Densidad de recorrido [Cuenta 50.00% [1:2] ptima:Cuenta real]: Fragmentacin del recorrido lgico: 0.00% Fragmentacin de recorrido de 50.00% extensin: Promedio de bytes libres por pgina: 246.7 Promedio de densidad de pgina 96.95% (completa): Ejecucin de DBCC completada. Si hay mensajes de error, consulte al administrador del sistema.
Sugerencia
21
Uso de la instruccin DBCC INDEXDEFRAG Desfragmenta el nivel de hoja de un ndice Organiza las pginas de nivel de hoja de forma que el orden fsico coincida con el orden lgico de izquierda a derecha Mejora el rendimiento del recorrido de ndices Desfragmentacin y regeneracin de ndices
Explicacin previa
La instruccin DBCC INDEXDEFRAG puede desfragmentar el nivel de hoja de ndices agrupados y no agrupados basados en tablas y vistas.
A medida que los datos de una tabla cambian, algunas veces los ndices se fragmentan. La instruccin DBCC INDEXDEFRAG puede desfragmentar el nivel de hoja de ndices agrupados y no agrupados basados en tablas y vistas. Al desfragmentar las pginas se organizan de forma que su orden fsico coincida con el orden lgico de izquierda a derecha de los nodos de hoja. Esta reorganizacin mejora el rendimiento del recorrido de ndices.
22
Ejemplo
Resultado
Pages moved 28
Pages removed 9
23
Opcin DROP_EXISTING
Objetivo del tema
Explicar el uso de la opcin DROP_EXISTING para cambiar la definicin de un ndice o regenerar ndices.
Explicacin previa
Puede utilizar la opcin DROP_EXISTING para cambiar una definicin de un ndice o para regenerar ndices.
Regeneracin de un ndice Reorganiza las pginas de hoja Quita la fragmentacin Vuelve a calcular las estadsticas de ndices Cambio de las caractersticas de un ndice Tipo Columnas del ndice Opciones
CREATE UNIQUE NONCLUSTERED INDEX U_OrdID_ProdID CREATE UNIQUE NONCLUSTERED INDEX U_OrdID_ProdID ON [Order Details] (OrderID, ProductID) ON [Order Details] (OrderID, ProductID) WITH DROP_EXISTING, FILLFACTOR=65 WITH DROP_EXISTING, FILLFACTOR=65
Puede utilizar la opcin DROP_EXISTING para cambiar las caractersticas de un ndice o regenerarlo sin necesidad de quitarlo y volverlo a crear. La ventaja de utilizar la opcin DROP_EXISTING consiste en que permite modificar los ndices creados con las restricciones PRIMARY KEY y UNIQUE.
Regeneracin de un ndice
Ejecute la instruccin CREATE INDEX con la opcin DROP_EXISTING para regenerar un ndice agrupado o no agrupado: Reorganice las pginas del nivel de hoja mediante la compresin o expansin de las filas. Quite la fragmentacin. Vuelva a calcular las estadsticas del ndice.
24
Para su informacin
No ensee la instruccin DBCC DBREINDEX. DROP_EXISTING proporciona ms funcionalidad. La nica ventaja de DBCC DBREINDEX es que permite regenerar varios ndices simultneamente.
Ejemplo
En este ejemplo se vuelve a generar el ndice existente, U_OrdID_ProdID, de la tabla Order Details. El ndice se define como agrupado, compuesto y con la opcin de que se llene cada pgina hasta un 65 por ciento. Esta instruccin producir un error si ya existe un ndice agrupado en la tabla Order Details.
CREATE UNIQUE NONCLUSTERED INDEX U_OrdID_ProdID ON [Order Details] (OrderID, ProductID) WITH DROP_EXISTING, FILLFACTOR=65
25
Explicacin previa
Cmo se recopilan las estadsticas Cmo se almacenan las estadsticas Creacin de estadsticas Actualizacin de estadsticas Vista de las estadsticas
Las estadsticas se pueden crear sobre ndices y columnas. Debido a que el optimizador de consultas utiliza estadsticas para optimizar consultas, es necesario que conozca la forma en que se recopilan, almacenan, crean, actualizan y ven.
Las estadsticas se pueden crear sobre ndices y columnas. Debido a que el optimizador de consultas utiliza estadsticas para optimizar consultas, es necesario que conozca la forma en que se recopilan, almacenan, crean, actualizan y ven.
26
Lee los valores de columna o una muestra de ellos Produce una lista de valores distribuida y ordenada uniformemente Realiza un recorrido completo o un muestreo de las filas Determina dinmicamente el porcentaje de filas que se van a muestrear en funcin del nmero de filas que hay en la tabla Selecciona muestras De la tabla o del ndice no agrupado ms pequeo creado con las columnas Todas las filas de la pgina de datos se utilizan para actualizar la informacin estadstica
Explicacin previa
27
Selecciona muestras
La muestra se selecciona al azar en las pginas de datos de la tabla o del ndice no agrupado ms pequeo creado con las columnas que necesitan las estadsticas. Una vez que una pgina se ha ledo en el disco, todas las filas de la pgina de datos se utilizan para actualizar la informacin estadstica. Cuando el optimizador de consultas recopila muestras: El tamao de la tabla determina el mtodo elegido. Se muestrea un nmero mnimo de valores para crear estadsticas tiles. Si el nmero de filas especificado es demasiado pequeo como para que resulte til, el optimizador de consultas corrige automticamente la muestra en funcin del nmero de filas existentes en la tabla. En el caso de los ndices compuestos, las estadsticas slo se mantienen en la primera columna definida.
28
Explicacin previa
state state
AL AL AK AK CA CA CA CA CA CA CT CT IL IL IL IL IL IL IL IL IL IL MT MT OR OR OR OR PA PA TX TX TX TX WA WA WA WA WA WA WI WI WY WY
Paso AL CA IL IL OR TX WA WY
Paso n 0 1 2 3 4 5 6 7 sysindexes
statblob statblob
AL AL CA CA IL IL IL IL OR OR TX TX WA WA WY WY
Sugerencia
Al crear un ndice con la tabla Sales, SQL Server crea estadsticas automticamente. Este ejemplo muestra cmo SQL Server crea las estadsticas.
Pasos de distribucin
Cada valor almacenado en la columna statblob se denomina paso de distribucin. Los pasos de distribucin hacen referencia al espacio entre muestras de datos o al nmero de filas que hay entre ellas antes de que se tome y almacene la siguiente muestra. Los valores de clave primero y ltimo del ndice siempre se incluyen en las estadsticas. Puede haber hasta 300 valores, de los que el punto final es el valor tricentsimo.
29
La densidad de las columnas individuales y de todas las columnas combinadas. El nmero de filas correspondientes a un paso del histograma. El nmero de filas que tienen un valor igual al lmite superior del paso del histograma. El nmero de valores distintos en un paso del histograma. Nota La columna statblob se define como un tipo de datos image.
30
Creacin de estadsticas
Objetivo del tema
Explicar cundo se crean las estadsticas y cundo es conveniente crearlas.
Creacin automtica de estadsticas Para columnas indizadas que contienen datos Para columnas no indizadas que se utilizan en un predicado de combinacin o en una clusula WHERE Creacin manual de estadsticas Columnas que no estn indizadas Todas las columnas de un ndice compuesto, excepto la primera
Explicacin previa
Puede crear estadsticas automtica o manualmente. Sin embargo, debe permitir que SQL Server cree estadsticas de forma automtica.
Puede crear estadsticas automtica o manualmente. Sin embargo, debe permitir que SQL Server cree estadsticas de forma automtica.
31
32
Actualizacin de estadsticas
Objetivo del tema
Describir cmo SQL Server determina la frecuencia de actualizacin de las estadsticas y cundo actualizarlas.
Frecuencia de actualizacin de las estadsticas Actualizacin automtica de estadsticas Actualizacin manual de estadsticas Si crea un ndice antes de introducir datos en una tabla Si la tabla se trunca Si agrega muchas filas a una tabla que contiene un mnimo de datos o ningn dato, y tiene pensado consultar inmediatamente esa tabla
Explicacin previa
Con el tiempo, las estadsticas se quedan desfasadas, lo que puede afectar al rendimiento del optimizador de consultas.
Con el tiempo, las estadsticas se quedan desfasadas, lo que puede afectar al rendimiento del optimizador de consultas.
33
34
La instruccin DBCC SHOW_STATISTICS devuelve la informacin estadstica en la pgina de distribucin de un ndice o una columna La informacin estadstica incluye: La hora en que las estadsticas se actualizaron por ltima vez El nmero de filas muestreadas para producir el histograma Informacin de densidad Longitud promedio de la clave Informacin del paso del histograma
Explicacin previa
Puede ver la informacin estadstica en la pgina de distribucin de un ndice o una columna con la instruccin DBCC SHOW_STATISTICS.
Puede ver la informacin estadstica en la pgina de distribucin de un ndice o una columna con la instruccin DBCC SHOW_STATISTICS. La tabla siguiente describe la informacin que devuelve la instruccin DBCC SHOW_STATISTICS.
Nombre de columna Updated Rows Rows sampled Steps Density Average key length All density Average length Columns RANGE_HI_KEY RANGE_ROWS Descripcin Fecha y hora en que las estadsticas se actualizaron por ltima vez. Nmero de filas existentes en la tabla. Nmero de filas muestreadas para la informacin estadstica. Nmero de pasos de distribucin. Selectividad del prefijo de la primera columna del ndice (no es frecuente). Longitud promedio del prefijo de la primera columna del ndice. Selectividad de un conjunto de prefijos de columnas de ndice (frecuente). Longitud promedio de un conjunto de prefijos de columnas de ndice. Nombre de los prefijos de columnas de ndice para los que se muestran las columnas All density y Average length. Valor del lmite superior de un paso del histograma. Nmero de filas de la muestra comprendidas en un paso del histograma, excluido el lmite superior.
35
Nmero de filas de la muestra que tienen un valor igual al lmite superior del paso del histograma. Nmero de valores distintos en un paso del histograma, excluido el lmite superior. Nmero promedio de valores duplicados en un paso del histograma, excluido el lmite superior (RANGE_ROWS / DISTINCT_RANGE_ROWS para DISTINCT_RANGE_ROWS > 0).
Sintaxis
DBCC SHOW_STATISTICS (tabla, destino) Ver las estadsticas resulta de utilidad, normalmente, cuando se desea ajustar el rendimiento para consultas especficas. En la mayor parte de las aplicaciones, no es necesario ver las estadsticas.
36
Almacena la informacin de la tabla y del ndice Tipo de ndice (indid) Espacio utilizado (dpages, reserved y used) Fillfactor (OrigFillFactor) Almacena las estadsticas de cada ndice
Explicacin previa
Puede consultar la tabla sysindexes para obtener informacin acerca de tablas e ndices, adems de las estadsticas de cada ndice.
Puede consultar la tabla sysindexes para obtener informacin acerca de tablas e ndices, adems de las estadsticas de cada ndice. La tabla siguiente es una lista parcial de la informacin que puede ver y que procede de los datos almacenados en la tabla sysindexes.
Columna indid (tipo de ndice) Descripcin Id. del ndice (tipo de ndice) Valores Los valores posibles son: 0 para tablas no agrupadas 1 para ndices agrupados >1 para ndices no agrupados 255 para tablas que tienen datos de texto o imagen dpages (espacio utilizado) Nmero de pginas de ndice de nivel de hoja Para indid = 0 o indid = 1, dpages es el nmero de pginas utilizadas. Para indid=255, dpages est establecido en 0. De otro modo, dpages es el nmero de pginas utilizadas del ndice no agrupado. reserved (espacio utilizado) Nmero de pginas reservadas para un ndice Para indid = 0 o indid = 1, reserved es el nmero de pginas asignadas a todos los ndices y datos de la tabla. Para indid = 255, reserved es el nmero de pginas asignadas a datos de texto o imagen. De otro modo, reserved es el nmero de pginas asignadas al ndice. used (espacio utilizado) Cantidad de espacio utilizado por un ndice Para indid = 0 o indid = 1, used es el nmero total de pginas utilizadas en todos los ndices y datos de la tabla. Para indid = 255, used es el nmero de pginas utilizadas en datos de texto o imagen. De otro modo, used es el nmero de pginas utilizadas en el ndice.
37
Este valor no se mantiene; sin embargo, puede resultar til si necesita volver a crear un ndice y no recuerda el valor de FILLFACTOR que se utiliz. Valor entero. Valor entero. Valor entero.
Ejemplo
En este ejemplo se ejecuta una instruccin que tiene acceso al identificador de ndice y a otra informacin de la tabla del sistema sysindexes. Especifique el nombre de un ndice agrupado (nombrendice) en la clusula WHERE para obtener su identificador de ndice.
SELECT id, indid, reserved, used, origfillfactor, name FROM Northwind.dbo.sysindexes WHERE name = 'PK_customers'
Resultado
id 2073058421 indid 1 reserved 15 used 15 origfillfactor 0 name PK_Customers
(1 filas afectadas)
38
Explicacin previa
Ya sea un usuario sin experiencia o uno avanzado, el Asistente para optimizacin de ndices puede ayudarle a crear ndices adecuados en una base de datos nueva o a comprobar los ndices existentes en su base de datos actual.
Ya sea un usuario sin experiencia o uno avanzado, el Asistente para optimizacin de ndices puede ayudarle a crear ndices adecuados en una base de datos nueva o a comprobar los ndices existentes en su base de datos actual. El Asistente para optimizacin de ndices examina la carga de consultas con el fin de determinar qu ndices son tiles, mientras que la caracterstica de plan de ejecucin muestra los ndices que se utilizan en las consultas.
39
Recomendar formas de ajustar la base de datos para un conjunto pequeo de consultas problemticas. Especificar criterios que tener en cuenta cuando el Asistente para optimizacin de ndices evala una carga de trabajo, como el nmero mximo de consultas que se debe ajustar, el espacio mximo que pueden ocupar los ndices recomendados y el nmero mximo de columnas por ndice.
40
Si desea reducir el tiempo de ejecucin del Asistente para optimizacin de ndices, debe: Asegurarse de que no est seleccionada la opcin Realizar un anlisis minucioso del cuadro de dilogo Seleccionar servidor y base de datos. Seleccionar esta opcin hace que el Asistente para optimizacin de ndices realice un anlisis pormenorizado de las consultas, lo que da lugar al aumento del tiempo de ejecucin. Tambin puede producir una mejora general superior en el rendimiento de la carga de trabajo ajustada. Ajustar slo un subconjunto de las tablas de la base de datos. Reducir el tamao del archivo de carga de trabajo. Nota Si utiliza el Asistente para optimizacin de ndices para analizar una secuencia de comandos de Transact-SQL que no tiene una extensin de nombre de archivo .sql, como Mi_secuencia.txt, y abre el archivo con la opcin Formato de archivo establecida en Auto, el asistente genera el mensaje de error Formato de archivo no vlido. En lugar de eso, establezca la opcin Formato de archivo a ANSI SQL o UNICODE SQL.
41
Cree ndices basados en claves externas Cree los ndices agrupados antes que los no agrupados Considere la creacin de ndices compuestos Cree varios ndices para una tabla que se lea con frecuencia Utilice el Asistente para optimizacin de ndices
Explicacin previa
Al crear o utilizar ndices, haga lo siguiente para reducir su efecto en el rendimiento. Cree ndices basados en claves externas, ya que, normalmente, las consultas harn referencia a ellas. Cree los ndices agrupados antes que los no agrupados, ya que los primeros cambian el orden fsico de las filas de la tabla. Cree ndices compuestos. El rendimiento de las consultas mejora con los ndices compuestos, especialmente cuando los usuarios buscan informacin de varias maneras. Cree varios ndices para cada tabla, especialmente para las que se lean con frecuencia. El rendimiento de las consultas mejora cuando la tabla tiene a la vez un ndice agrupado y varios ndices no agrupados. Utilice el Asistente para optimizacin de ndices con el fin de hacer un seguimiento automtico del uso de los ndices y como ayuda para el mantenimiento y creacin de ndices con el mejor rendimiento.