Vous êtes sur la page 1sur 43

Creacin y Mantenimiento de ndices

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

Creacin y Mantenimiento de ndices

Notas para el instructor


Este mdulo ofrece a los alumnos una introduccin a la creacin y mantenimiento de los ndices con las opciones de CREATE INDEX. Describe cmo los procedimientos de mantenimiento cambian fsicamente los ndices. El mdulo explica las herramientas de mantenimiento y describe el uso de estadsticas en Microsoft SQL Server 2000. Tambin describe formas de comprobar el uso de ndices y trata el modo de saber que funcionan correctamente. El mdulo concluye con una explicacin de cundo utilizar el Asistente para optimizacin de ndices. Despus de completar este mdulo, los alumnos sern capaces 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 y Mantenimiento de ndices

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

En este mdulo aprender a crear y mantener ndices.

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

Creacin y Mantenimiento de ndices

Creacin y eliminacin de ndices


Objetivo del tema
Presentar las instrucciones CREATE INDEX y DROP INDEX.

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.

Uso de la instruccin DROP INDEX


USE Northwind USE Northwind DROP INDEX employees.CL_lastname DROP INDEX employees.CL_lastname

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.

Uso de la instruccin CREATE INDEX


La instruccin CREATE INDEX permite crear ndices. Tambin puede usar el Asistente para creacin de ndices del Administrador corporativo de SQL Server. Al crear un ndice basado en una o varias columnas de una tabla, tenga en cuenta los siguientes hechos e instrucciones: SQL Server crea ndices automticamente cuando se crea una restriccin PRIMARY KEY o UNIQUE en una tabla. La definicin de una restriccin PRIMARY KEY o UNIQUE es preferible a la creacin de ndices ordinarios. Para ejecutar la instruccin CREATE INDEX es necesario ser el propietario de la tabla. Es posible crear ndices en las vistas. SQL Server almacena la informacin de los ndices en la tabla del sistema sysindexes. Antes de crear un ndice basado en una columna, determine qu ndices hay ya basados en ella.

Creacin y Mantenimiento de ndices

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

Uso de la instruccin DROP INDEX


La instruccin DROP INDEX permite quitar un ndice de una tabla. Al quitar un ndice, tenga en cuenta los siguientes hechos: Al ejecutar la instruccin DROP INDEX, SQL Server reclama el espacio de disco que ocupaba el ndice. No es posible utilizar la instruccin DROP INDEX con ndices creados con la restriccin PRIMARY KEY o UNIQUE. Para quitar estos ndices, primero es necesario quitar la restriccin. Al quitar una tabla se quitan tambin todos sus ndices. Al quitar un ndice agrupado, todos los ndices no agrupados de la tabla se vuelven a generar automticamente. Para quitar un ndice es necesario encontrarse en la base de datos en la que reside ese ndice. La instruccin DROP INDEX no se puede utilizar en las tablas de sistema. Sintaxis Ejemplo 2 DROP INDEX 'tabla.ndice | vista.ndice' [, ...n ] En este ejemplo se quita el ndice cl_lastname de la tabla Employees.
USE Northwind DROP INDEX employees.CL_lastname

Creacin y Mantenimiento de ndices

Creacin de ndices nicos


Objetivo del tema
Explicar cmo los ndices nicos aseguran que las columnas indizadas son nicas.
USE Northwind USE Northwind CREATE UNIQUE NONCLUSTERED INDEX U_CustID CREATE UNIQUE NONCLUSTERED INDEX U_CustID ON customers(CustomerID) ON customers(CustomerID)

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.

Creacin y Mantenimiento de ndices

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)

Bsqueda de todos los valores duplicados de una columna


Si en el momento de crear un ndice nico ya hay valores de clave duplicados, la instruccin CREATE INDEX produce un error. SQL Server devuelve un mensaje de error con el primer valor duplicado, pero puede haber otros. Puede usar la secuencia de comandos siguiente en cualquier tabla para buscar todos los valores duplicados de una columna. Reemplace el texto en cursiva por informacin especfica de su consulta.
SELECT index_col, COUNT (index_col) FROM tablename GROUP BY index_col HAVING COUNT(index_col)>1 ORDER BY index_col

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

CustomerID (0 filas afectadas)

# of Duplicates

Creacin y Mantenimiento de ndices

Creacin de ndices compuestos


Objetivo del tema
Explicar el funcionamiento de los ndices compuestos.
USE Northwind USE Northwind CREATE UNIQUE NONCLUSTERED INDEX U_OrdID_ProdID CREATE UNIQUE NONCLUSTERED INDEX U_OrdID_ProdID ON [Order Details] (OrderID, ProductID) ON [Order Details] (OrderID, ProductID)

Explicacin previa

Los ndices compuestos especifican ms de una columna como valor de clave.

Order Details Order Details


OrderID ProductID UnitPrice Quantity OrderID ProductID UnitPrice Quantity 10248 10248 10248 10248 10248 10248 11 11 42 42 72 72 14.000 14.000 9.800 9.800 34.800 34.800 12 12 10 10 5 5 Discount Discount 0.0 0.0 0.0 0.0 0.0 0.0

Columna 1

Columna 2

Clave Clave compuesta compuesta

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.

Creacin y Mantenimiento de ndices

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)

Creacin y Mantenimiento de ndices

Creacin de ndices en columnas calculadas


Objetivo del tema
Explicar los requisitos para crear un ndice en una columna calculada.

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.

Es posible que el optimizador de consultas ignore un ndice en una columna calculada

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.

Creacin y Mantenimiento de ndices

10

Obtencin de informacin acerca de los ndices existentes


Objetivo del tema
Explicar cmo obtener informacin acerca de los ndices existentes.

Uso del procedimiento almacenado del sistema sp_helpindex


USE Northwind USE Northwind EXEC sp_helpindex Customers EXEC sp_helpindex Customers

Explicacin previa

Antes de crear, modificar o quitar un ndice puede ser necesario obtener informacin acerca de los ndices existentes.

Uso del procedimiento almacenado de sistema sp_help nombreTabla

Antes de crear, modificar o quitar un ndice puede ser necesario obtener informacin acerca de los ndices existentes.

Uso del procedimiento almacenado del sistema sp_helpindex


Puede utilizar el Administrador corporativo de SQL Server o ejecutar el procedimiento almacenado de sistema sp_helpindex para obtener informacin acerca de un ndice, como su nombre, su tipo o sus opciones en una tabla determinada. Ejemplo En este ejemplo se muestran los ndices de la tabla Customers.
USE Northwind EXEC sp_helpindex Customers

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

Uso del procedimiento almacenado de sistema sp_help nombreTabla


Tambin puede ejecutar el procedimiento almacenado de sistema sp_help nombreTabla para obtener informacin acerca de los ndices y otros datos de la tabla.

Creacin y Mantenimiento de ndices

11

Opciones de creacin de ndices


Objetivo del tema
Proporcionar una breve introduccin a algunas de las opciones de creacin de ndices.

Uso de la opcin FILLFACTOR Uso de la opcin PAD_INDEX

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.

Creacin y Mantenimiento de ndices

12

Uso de la opcin FILLFACTOR


Objetivo del tema
Determinar cundo y cmo utilizar la opcin FILLFACTOR para aumentar el rendimiento.

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.

Fillfactor 50 = 50% de pginas de hoja llenas


Con ... 470401 Rudd ... 470501 Akhtar ... 470601 Martin ... 470604 Martin ... 470801 Smith ... 470804 Funk ... 470402 White ... 470502 Funk ... 470402 Smith ... 470701 Phua ... 470802 Ganio ... 470901 White ... 470403 Barr ... 470503 Smith ... 470603 Ota ... 470702 Jones ... 470803 White ... 470902

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.

Creacin y Mantenimiento de ndices

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.

Creacin y Mantenimiento de ndices

14

Uso de la opcin PAD_INDEX


Objetivo del tema
Explicar el uso de la opcin PAD_INDEX.

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

Pginas del nivel de hoja Rellenar hasta el porcentaje especificado

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.

Creacin y Mantenimiento de ndices

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

Creacin y Mantenimiento de ndices

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.

Creacin y Mantenimiento de ndices

17

Fragmentacin de los datos


Objetivo del tema
Explicar cmo se produce la fragmentacin de datos y los mtodos para administrarla. Cmo se produce la fragmentacin SQL Server reorganiza las pginas de ndice cuando se modifican los datos La reorganizacin hace que se dividan las pginas de ndice Mtodos para administrar la fragmentacin Elimine y vuelva a crear un ndice, y especifique un valor para FILLFACTOR Vuelva a generar un ndice y especifique un valor para FILLFACTOR Entorno de trabajo La fragmentacin de datos puede ser beneficiosa en el entorno OLTP La fragmentacin de datos puede ser desfavorable para el entorno Analysis Server

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.

En funcin de su entorno de trabajo, la fragmentacin puede afectar al rendimiento favorable o desfavorablemente.

Cmo se produce la fragmentacin


La fragmentacin se produce al modificar los datos. Por ejemplo, cuando se agregan o se eliminan filas de una tabla, o cuando cambian los valores de las columnas indizadas, SQL Server ajusta las pginas de ndice para adaptarlas a los cambios y mantener el almacenamiento de los datos indizados. Este ajuste de las pginas de ndice se conoce como divisin de pginas. El proceso de divisin aumenta el tamao de la tabla y el tiempo necesario para procesar las consultas.

Mtodos para administrar la fragmentacin


En SQL Server hay dos mtodos para administrar la fragmentacin. El primero consiste en quitar y volver a crear un ndice agrupado, y especificar un valor con la opcin FILLFACTOR. El segundo consiste en volver a generar un ndice y especificar un valor de FILLFACTOR.

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.

Creacin y Mantenimiento de ndices

18

Instruccin DBCC SHOWCONTIG


Objetivo del tema
Explicar el uso de la instruccin DBCC SHOWCONTIG.

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.

Qu determina la instruccin DBCC SHOWCONTIG


Al ejecutar la instruccin DBCC SHOWCONTIG, SQL Server recorre las pginas de ndices del nivel de hoja para determinar si una tabla o un ndice especficos estn muy fragmentados. Tambin determina si las pginas de datos o de ndices estn llenas.

Cundo ejecutar la instruccin DBCC SHOWCONTIG


Puede ejecutar la instruccin DBCC SHOWCONTIG en tablas con muchas modificaciones, que contengan datos importados o que parezcan provocar un bajo rendimiento en las consultas. Al ejecutar la instruccin DBCC SHOWCONTIG, tenga en cuenta los siguientes hechos e instrucciones: Sugerencia SQL Server requiere una referencia a un identificador de tabla o de ndice al ejecutar la instruccin DBCC SHOWCONTIG. Puede consultar la tabla sysindexes para obtener el identificador de tabla o de ndice. Determine la frecuencia con que debe ejecutar la instruccin DBCC SHOWCONTIG. Mida la actividad diaria, semanal o mensual de las tablas.

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.

Creacin y Mantenimiento de ndices

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.

Fragmentacin del recorrido lgico

Fragmentacin de recorrido de extensin

Promedio de bytes libres por pgina

Promedio de densidad de pgina (completa)

Sintaxis

DBCC SHOWCONTIG [({nombreTabla | idTabla | nombreVista | idVista } [, nombrendice | idndice ] )] [ WITH { ALL_INDEXES | FAST [, ALL_INDEXES ] | TABLERESULTS [, { ALL_INDEXES } ] [, { FAST | ALL_LEVELS } ] } ]

Creacin y Mantenimiento de ndices

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.

Vea si estos resultados son adecuados en un entorno determinado.

Sugerencia

Creacin y Mantenimiento de ndices

21

Instruccin DBCC INDEXDEFRAG


Objetivo del tema
Explicar el uso de la instruccin DBCC INDEXDEFRAG.

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.

Uso de la instruccin DBCC INDEXDEFRAG


Cuando se utiliza la instruccin DBCC INDEXDEFRAG, sta: Compacta las pginas de un ndice, teniendo en cuenta el valor de FILLFACTOR especificado cuando se cre el ndice. Toda pgina vaca creada como resultado de esta compactacin se quitar. Desfragmenta un archivo a la vez cuando un ndice abarca ms de un archivo. Las pginas no migran entre archivos. Informa al usuario del porcentaje previsto completado. Dichos informes se producen cada cinco minutos. La instruccin DBCC INDEXDEFRAG puede terminarse en cualquier punto del proceso y todo el trabajo completado se conserva. Es una operacin en lnea. No establece bloqueos durante un tiempo prolongado y no bloquea las consultas o actualizaciones en ejecucin. La desfragmentacin se registra siempre al completo, sin importar la configuracin del modelo de recuperacin de la base de datos.

Creacin y Mantenimiento de ndices

22

Desfragmentacin y regeneracin de ndices


El tiempo necesario para desfragmentar est relacionado con la cantidad de fragmentacin. Un ndice muy fragmentado podra requerir ms tiempo para desfragmentarse que para regenerarse. Se tarda menos en desfragmentar un ndice relativamente desfragmentado que en regenerar uno nuevo. Nota El uso de la instruccin DBCC INDEXDEFRAG no mejora el rendimiento cuando los ndices estn fsicamente desfragmentados en el disco. Para desfragmentar fsicamente un ndice, hay que regenerarlo. Sintaxis DBCC INDEXDEFRAG ( { nombreBaseDeDatos | IdBaseDeDatos | 0 } , { nombreTabla | IdTabla | 'nombreVista' | IdVista } , { nombrendice | Idndice } ) [ WITH NO_INFOMSGS ] En este ejemplo se ejecuta la instruccin DBCC INDEXDEFRAG en el ndice mem_no_CL de la tabla Member de la base de datos credit.
DBCC INDEXDEFRAG(credit, member, mem_no_CL)

Ejemplo

Resultado

Pages scanned 150 (1 filas afectadas)

Pages moved 28

Pages removed 9

Creacin y Mantenimiento de ndices

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.

Creacin y Mantenimiento de ndices

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.

Cambio de las caractersticas de un ndice


Al utilizar la opcin DROP_EXISTING puede cambiar las siguientes caractersticas de un ndice: Tipo Puede convertir un ndice no agrupado en un ndice agrupado. No es posible convertir un ndice agrupado en no agrupado. Columnas del ndice Puede cambiar la definicin del ndice para especificar columnas distintas. Puede especificar columnas adicionales o quitar columnas de los ndices compuestos. Puede cambiar las columnas del ndice para que sean nicas o no nicas. Opciones Puede cambiar el valor de porcentaje de FILLFACTOR o PAD_INDEX. Al utilizar la opcin DROP_EXISTING, tenga en cuenta los siguientes hechos e instrucciones: En el caso de un ndice agrupado, SQL Server requiere tener 1,2 veces el espacio que ocupa la tabla para volver a organizar fsicamente los datos. La opcin DROP_EXISTING acelera el proceso de generacin de ndices agrupados y no agrupados, ya que elimina el proceso de ordenacin. Utilice la opcin FILLFACTOR con la opcin DROP_EXISTING si desea que las pginas del nivel de hoja se llenen hasta un porcentaje determinado. Esto puede ser til cuando sea necesario asignar espacio para nuevos datos o cuando haya que compactar el ndice. No es posible volver a generar los ndices de las tablas de sistema. La opcin DROP_EXISTING en un ndice agrupado ayuda a evitar la tarea innecesaria de eliminar y volver a crear ndices no agrupados si el ndice agrupado se regenera en la misma columna. Los ndices no agrupados se regeneran una sola vez y slo si las claves son distintas.

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

Creacin y Mantenimiento de ndices

25

Introduccin a las estadsticas


Objetivo del tema
Presentar los temas de esta seccin.

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.

Creacin y Mantenimiento de ndices

26

Cmo se recopilan las estadsticas


Objetivo del tema
Explicar cmo SQL Server recopila estadsticas.

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

Las estadsticas son un muestreo de los valores de columna.

Las estadsticas son un muestreo de los valores de columna.

Lee los valores de columna o una muestra de ellos


SQL Server recopila estadsticas mediante la lectura de todos los valores de columna o de una muestra de ellos para producir una lista de valores distribuida y ordenada uniformemente conocida como pasos de distribucin. Para generar los pasos de distribucin SQL Server realiza un recorrido completo o un recorrido de muestreo y, despus, selecciona las muestras.

Realiza un recorrido completo o un muestreo de las filas


SQL Server determina dinmicamente el porcentaje de filas que se van a muestrear en funcin del nmero de filas que hay en la tabla. Para recopilar estadsticas el optimizador de consultas realiza un recorrido completo o un muestreo de las filas. La opcin SAMPLE es la predeterminada para actualizar y crear estadsticas. La opcin FULLSCAN se utiliza cuando: Se crean los ndices. La opcin FULLSCAN aparece especificada en la instruccin CREATE STATISTICS. Se ejecuta la instruccin UPDATE STATISTICS.

Creacin y Mantenimiento de ndices

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.

Creacin y Mantenimiento de ndices

28

Cmo se almacenan las estadsticas


Objetivo del tema
Explicar cmo se almacenan las estadsticas en SQL Server.
Sales

Explicacin previa

Las estadsticas se almacenan en la columna statblob de la tabla del sistema sysindexes.

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.

Las estadsticas se almacenan en la columna statblob de la tabla del sistema sysindexes.

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.

Contenido de la columna statblob


Adems de almacenar pasos de distribucin, la columna statblob almacena tambin: La fecha y la hora en que las estadsticas se actualizaron por ltima vez. El nmero de filas existentes en la tabla. El nmero de filas muestreadas para crear el histograma y determinar la densidad. El nmero de pasos de distribucin. La longitud promedio de la clave.

Creacin y Mantenimiento de ndices

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.

Creacin y Mantenimiento de ndices

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.

Creacin automtica de estadsticas


Cuando el valor predeterminado de la opcin de base de datos crear estadsticas automticamente est establecido en ON, SQL Server crea estadsticas automticamente: Para columnas indizadas que contienen datos. Para columnas no indizadas que se utilizan en un predicado de combinacin o en una clusula WHERE. El optimizador de consultas activa la creacin automtica de estadsticas al optimizar una consulta. Esto puede resultar un inconveniente si el optimizador de consultas determina que las estadsticas estn perdidas. El plan de ejecucin incluir la accin de creacin de estadsticas, lo que requerir tiempo adicional para procesar la consulta. Nota Cuando se ejecuta una consulta y se examina el plan de ejecucin, el optimizador de consultas puede sugerir acciones correctoras, como crear o actualizar las estadsticas, o crear un ndice. En ese punto, puede crear o actualizar inmediatamente estadsticas e ndices.

Creacin y Mantenimiento de ndices

31

Creacin manual de estadsticas


Puede ejecutar la instruccin CREATE STATISTICS para crear un histograma y los grupos de densidad asociados de columnas especficas. Puede crear estadsticas en: Columnas que no estn indizadas: Todas las columnas de un ndice compuesto, excepto la primera. Columnas calculadas slo cuando se den las condiciones que permitan crear un ndice en esas columnas. Columnas de tipos de datos image, text y ntext que no estn definidas. La creacin manual de estadsticas es til si tiene una columna en la que un ndice no sera beneficioso, pero las estadsticas en esa columna pueden ser tiles para crear planes de ejecucin ms ptimos. Tener estadsticas en esas columnas elimina la carga de trabajo que supone un ndice, al tiempo que permite al optimizador de consultas utilizar la columna al optimizar consultas. Nota Para crear manualmente estadsticas en una tabla es necesario ser su propietario. Sintaxis parcial CREATE STATISTICS nombreEstadsticas ON {tabla| vista} (columna [,...n])

Creacin y Mantenimiento de ndices

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.

Frecuencia de actualizacin de las estadsticas


SQL Server actualiza la informacin estadstica cuando sta ya no es actual. El volumen de datos de la columna relativo a la cantidad de datos que cambian determina la frecuencia de actualizacin. Por ejemplo: Las estadsticas de una tabla que contiene 10.000 filas puede requerir actualizacin cuando 1.000 valores de ndice han cambiado, ya que estos valores representan un porcentaje significativo de la tabla. Las estadsticas de una tabla que contiene 10 millones de entradas de ndice puede no requerir actualizacin cuando 1.000 valores de ndice han cambiado, ya que estos valores representan un porcentaje pequeo de la tabla. SQL Server siempre toma muestras de un nmero mnimo de filas. Las tablas con un tamao inferior a 8 megabytes (MB) siempre se recorren totalmente para recopilar estadsticas. Nota Cuando las estadsticas estn desfasadas o no estn disponibles, SQL Server emite un mensaje de advertencia. ste aparece cuando se examina el plan de ejecucin. Puede utilizar el Analizador de SQL para supervisar la clase de suceso Missing Column Statistics. Esta clase de suceso indica cundo faltan estadsticas.

Creacin y Mantenimiento de ndices

33

Actualizacin automtica de estadsticas


Debe permitir que SQL Server actualice estadsticas automticamente. Cuando la opcin de base de datos crear estadsticas automticamente est establecida en ON (valor predeterminado), SQL Server actualiza automticamente las estadsticas al quedarse desfasadas. Por ejemplo, si una tabla se actualiza bastante desde la ltima vez que se crearon o actualizaron las estadsticas, SQL Server actualiza automticamente las estadsticas para optimizar las consultas que utilizan la tabla. El optimizador de consultas activa la actualizacin automtica de estadsticas al optimizar una consulta. Esto puede resultar un inconveniente si el optimizador de consultas determina que las estadsticas estn desfasadas. El plan de ejecucin incluir la accin de actualizacin de estadsticas, lo que requerir tiempo adicional para procesar la consulta.

Actualizacin manual de estadsticas


Puede ejecutar la instruccin UPDATE STATISTICS para actualizar la informacin acerca de la distribucin de los valores de clave para una o varias estadsticas de una tabla especificada. Es posible que le convenga actualizar manualmente las estadsticas de una tabla o una columna en las siguientes situaciones: 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. Sintaxis parcial UPDATE STATISTICS tabla| vista [ndice | (nombreEstadsticas[,...n])] Nota Para ver una lista de nombres y descripciones de ndices, ejecute el procedimiento almacenado del sistema sp_helpindex con la tabla de nombres.

Creacin y Mantenimiento de ndices

34

Vista de las estadsticas


Objetivo del tema
Explicar el modo de ver la informacin de las estadsticas.

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.

Creacin y Mantenimiento de ndices


(continuacin) Nombre de columna EQ_ROWS DISTINCT_RANGE_ROWS AVG_RANGE_ROWS Descripcin

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.

Creacin y Mantenimiento de ndices

36

Consultas en la tabla sysindexes


Objetivo del tema
Explicar cmo consultar la tabla sysindexes para obtener informacin acerca de tablas e ndices.

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.

Creacin y Mantenimiento de ndices


(continuacin) Columna OrigFillFactor (fillfactor) minlen xmaxlen maxirow Descripcin Valor de FILLFACTOR original utilizado cuando se cre el ndice Tamao mnimo de una fila Tamao mximo de una fila Tamao mximo de una fila del ndice no situada en el nivel de hoja Descripcin de las columnas de clave Nmero de veces que se han actualizado las estadsticas Objeto largo binario de estadsticas (BLOB) Valores

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.

keys statversion statblob

Slo se aplica si la entrada es un ndice. Valor entero. Almacena la informacin estadstica.

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)

Creacin y Mantenimiento de ndices

38

Configuracin de ndices mediante el Asistente para optimizacin de ndices


Objetivo del tema
Presentar el Asistente para optimizacin de ndices. Utilice el Asistente para optimizacin de ndices para: Recomendar o comprobar la configuracin de ndices ptima Facilitar el anlisis del costo Recomendar formas de ajustar la base de datos Especificar criterios cuando evala una carga de trabajo No utilice el Asistente para optimizacin de ndices en: Tablas a las que se hace referencia mediante consultas cruzadas de base de datos que no existen Tablas del sistema, restricciones PRIMARY KEY, ndices nicos

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.

Determinar cundo utilizar el Asistente para optimizacin de ndices


Los usuarios sin experiencia pueden utilizar el asistente para crear rpidamente una configuracin de ndices ptima. Los usuarios avanzados pueden utilizarlo para establecer una configuracin de ndices de referencia y, despus, personalizarla o comprobar la configuracin de sus ndices. El Asistente para optimizacin de ndices puede: Recomendar o comprobar la configuracin de ndices ptima para una base de datos dada una carga de trabajo o un archivo de traza aplicado, mediante el anlisis de costos del optimizador de consultas. Facilitar el anlisis del costo de los cambios propuestos, como son: Uso de los ndices actuales y de los recomendados. Mejora del rendimiento de las consultas para las 100 consultas ms costosas y participacin de la tabla en una carga de trabajo.

Creacin y Mantenimiento de ndices

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.

Determinar cmo utilizar el Asistente


Al utilizar el Asistente para optimizacin de ndices, tenga en cuenta los siguientes hechos e instrucciones: El usuario que invoca el Asistente para optimizacin de ndices debe ser miembro de la funcin fija de servidor sysadmin puesto que las consultas de la carga de trabajo se analizan en el contexto de seguridad del usuario. No se recomienda utilizar el Asistente para optimizacin de ndices en los siguientes casos: Tablas a las que se hace referencia mediante consultas cruzadas de base de datos que no existen en la base de datos seleccionada actualmente. Tablas del sistema. Restricciones PRIMARY KEY e ndices nicos. El asistente puede eliminar o reemplazar un ndice agrupado que no sea nico o que se haya creado con una restriccin PRIMARY KEY. No se recomienda eliminar ningn ndice cuando la opcin Mantener todos los ndices existentes est seleccionada. El asistente recomienda utilizar slo ndices nuevos, siempre que sea conveniente. Desactivar esta opcin puede producir una mejora general superior en el rendimiento de la carga de trabajo. Se recomienda dejar seleccionada la opcin Todas las vistas indizadas. Las sugerencias pueden impedir que el Asistente para optimizacin de ndices elija un plan de ejecucin mejor. Considere quitar las sugerencias de ndice de las consultas antes de analizar la carga de trabajo.

Creacin y Mantenimiento de ndices

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.

Creacin y Mantenimiento de ndices

41

Consideraciones acerca del rendimiento


Objetivo del tema
Comentar consideraciones acerca del rendimiento al planear y crear ndices.

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.

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.

Vous aimerez peut-être aussi