Está en la página 1de 43

Creacin y Mantenimiento de

ndices







Introduccin 1
Contenido

Creacin de ndices 2
Opciones de creacin de ndices 11
Mantenimiento de ndices 16
Introduccin a las estadsticas 25
Consultas en la tabla sysindexes 36
Configuracin de ndices mediante el
Asistente para optimizacin de ndices 38
Consideraciones acerca del rendimiento 41










Creacin y Mantenimiento de ndices i

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 1

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

Objetivo del tema
Proporcionar una
introduccin a los temas
y objetivos del mdulo.
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 2
Creacin de ndices
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

Objetivo del tema
Presentar los temas acerca
de la creacin de ndices.
Explicacin previa
Ahora que se ha familiari-
zado 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 3
Creacin y eliminacin de ndices
USE Northwind
CREATE CLUSTERED INDEX CL_lastname
ON employees(lastname)
USE Northwind
CREATE CLUSTERED INDEX CL_lastname
ON employees(lastname)
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
Uso de la instruccin DROP INDEX
USE Northwind
DROP INDEX employees.CL_lastname
USE Northwind
DROP INDEX employees.CL_lastname

Objetivo del tema
Presentar las instrucciones
CREATE INDEX y DROP
INDEX.
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.

Para ejecutar cualquiera de estas instrucciones en una base de datos, es
necesario ser el propietario de la tabla.
Nota

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 4

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 ]
Ejemplo 1 En este ejemplo se crea un ndice agrupado con la columna Lastname de la
tabla Employees.
CREATE CLUSTERED INDEX CL_lastname
ON employees(lastname)

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 DROP INDEX 'tabla.ndice | vista.ndice' [, ...n ]
Ejemplo 2 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 5
Creacin de ndices nicos
USE Northwind
CREATE UNIQUE NONCLUSTERED INDEX U_CustID
ON customers(CustomerID)
USE Northwind
CREATE UNIQUE NONCLUSTERED INDEX U_CustID
ON customers(CustomerID)
Los valores de clave duplicados no
se permiten cuando se agrega a la
tabla una fila nueva
Los valores de clave duplicados no
se permiten cuando se agrega a la
tabla una fila nueva
RANCH
RANCH
Sant Gourmet
Sant Gourmet
J onas Bergulfsen
J onas Bergulfsen

Customers
Customers Customers
CustomerID
CustomerID
CompanyName
CompanyName
ContactName
ContactName

QUICK
BONAP
12
QUICK
BONAP
12
QUICK-Stop
Bon app'
Walking
QUICK-Stop
Bon app'
Walking
Horst Kloss
Laurence Lebihan
Henry David Thoreau
Horst Kloss
Laurence Lebihan
Henry David Thoreau RANCH Rancho grande Sergio Gutirrez

Objetivo del tema
Explicar cmo los ndices
nicos aseguran que las
columnas indizadas son
nicas.
Explicacin previa
En un ndice nico no se
permite que dos filas tengan
el mismo valor de clave.

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 6
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 # of Duplicates

(0 filas afectadas)

Creacin y Mantenimiento de ndices 7
Creacin de ndices compuestos
USE Northwind
CREATE UNIQUE NONCLUSTERED INDEX U_OrdID_ProdID
ON [Order Details] (OrderID, ProductID)
USE Northwind
CREATE UNIQUE NONCLUSTERED INDEX U_OrdID_ProdID
ON [Order Details] (OrderID, ProductID)
Clave
compuesta
Clave
compuesta
Columna 1 Columna 2
Order Details
Order Details Order Details
OrderID
OrderID
ProductID
ProductID
UnitPrice
UnitPrice
Quantity
Quantity
10248
10248
10248
10248
10248
10248
11
42
72
11
42
72
14.000
9.800
34.800
14.000
9.800
34.800
12
10
5
12
10
5
Discount
Discount
0.0
0.0
0.0
0.0
0.0
0.0

Objetivo del tema
Explicar el funcionamiento
de los ndices compuestos.
Explicacin previa
Los ndices compuestos
especifican ms de una
columna como valor de
clave.

Los ndices compuestos especifican ms de una columna como valor de clave.
Puede crear ndices compuestos:
Sugerencia
Seale que la columna
OrderID es la primera por
ser ms selectiva que la
columna ProductID.
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 8
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.


Normalmente, no es til tener varios ndices basados en las mismas
columnas.
Nota

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 9
Creacin de ndices en columnas calculadas
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
Es posible que el optimizador de consultas ignore un
ndice en una columna calculada

Objetivo del tema
Explicar los requisitos para
crear un ndice en una
columna calculada.
Explicacin previa
Para poder crear un ndice
en una columna calculada,
es necesario cumplir ciertos
requisitos.

Es posible crear ndices en columnas calculadas cuando se dan las siguientes
circunstancias:
Para su informacin
Seale que los Libros en
pantalla de SQL Server
contienen informacin
adicional acerca de las
funciones deterministas y
no deterministas.
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 OBJ ECTPROPERTY 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.
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:
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.
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.


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

Creacin y Mantenimiento de ndices 10
Obtencin de informacin acerca de los ndices existentes
Uso del procedimiento almacenado del sistema
sp_helpindex
Uso del procedimiento almacenado de sistema sp_help
nombreTabla
USE Northwind
EXEC sp_helpindex Customers
USE Northwind
EXEC sp_helpindex Customers

Objetivo del tema
Explicar cmo obtener
informacin acerca de
los ndices existentes.
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.
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 index_description index_keys
PK_Customers clustered, unique, Primary Key located on PRIMARY CustomerID
PostalCode nonclustered located on PRIMARY PostalCode
City nonclustered located on PRIMARY City

(1 filas afectadas)

Uso del procedimiento almacenado de sistema sp_help nombreTabla
Sugerencia
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.
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
Uso de la opcin FILLFACTOR
Uso de la opcin PAD_INDEX

Objetivo del tema
Proporcionar una breve
introduccin a algunas de
las opciones de creacin
de ndices.
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
Especifica cunto debe llenarse la pgina
Afecta a las pginas del nivel de hoja
Pginas de datos ll enas
Akhtar
Funk
Smith
Martin
Smith
...
...
...
...
...
470601
470602
470603
470604
470701
Ota ... 470702
Martin
Phua
Jones
Smith
Ganio
...
...
...
...
...
470801
470802
470803
470804
470901
Jones ... 470902
Fillfactor 50 = 50% de pginas de hoja llenas
Con
Funk
White
...
...
...
470401
470402
470403
Rudd
White
Barr
...
...
...
470501
470502
470503
Akhtar
Funk
Smith
...
...
...
470601
470402
470603
Martin
Smith
Ota
...
...
...
470604
470701
470702
Martin
Phua
Jones
...
...
...
470801
470802
470803
Con
Funk
White
Rudd
...
...
...
...
470401
470402
470403
470501
White ... 470502
Barr ... 470503
Smith
Ganio
White
...
...
...
470804
470901
470902

Objetivo del tema
Determinar cundo y
cmo utilizar la opcin
FILLFACTOR para
aumentar el rendimiento.
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.

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

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
Pginas del nivel
de hoja
Pginas de niveles
distintos del de hoja
Actividad en
los valores de clave
Entorno de
trabajo habitual

0 (predeterm.) Rellenar
completamente
Dejar sitio para una
entrada de ndice
Sin modificacin o
modificaciones leves
Analysis Services
199

Rellenar hasta
el porcentaje
especificado
Dejar sitio para una
entrada de ndice
Modificaciones
de moderadas a
frecuentes
Mixto u OLTP
100 Rellenar
completamente
Dejar sitio para una
entrada de ndice
Sin modificacin
o modificaciones
leves
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
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
CREATE INDEX OrderID_ind
ON Orders(OrderID)
WITH PAD_INDEX, FILLFACTOR=70
USE Northwind
CREATE INDEX OrderID_ind
ON Orders(OrderID)
WITH PAD_INDEX, FILLFACTOR=70

Objetivo del tema
Explicar el uso de la opcin
PAD_INDEX.
Explicacin previa
Puede utilizar la opcin
PAD_INDEX con la opcin
FILLFACTOR para
optimizar el rendimiento
al crear o volver a generar
un ndice.

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.
Sugerencia
Seale que los alumnos
utilizarn la opcin
PAD_INDEX pocas
veces. Se obtiene mayor
rendimiento cuando se
utiliza FILLFACTOR
adecuadamente.
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.
Porcentaje de
FILLFACTOR
Pginas del nivel
de hoja
Pginas de niveles
distintos del de hoja
Actividad en
los valores de clave
Entorno de
trabajo habitual

199

Rellenar hasta el
porcentaje
especificado
Rellenar hasta el
porcentaje
especificado
Modificaciones de
moderadas a
frecuentes
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.

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
Fragmentacin de los datos
Instruccin DBCC SHOWCONTIG
Instruccin DBCC INDEXDEFRAG
Opcin DROP_EXISTING

Objetivo del tema
Proporcionar una breve
introduccin a varias
herramientas de
mantenimiento.
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
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

Objetivo del tema
Explicar cmo se produce
la fragmentacin de datos
y los mtodos para
administrarla.
Explicacin previa
Con el tiempo, a medida
que se modifican las tablas
se produce la fragmen-
tacin. 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
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

Objetivo del tema
Explicar el uso de la
instruccin DBCC
SHOWCONTIG.
Explicacin previa
Si le preocupa la fragmen-
tacin, puede utilizar
la instruccin DBCC
SHOWCONTIG para
averiguar si una tabla
o sus ndices estn
fragmentados.

La instruccin DBCC SHOWCONTIG muestra informacin acerca de la
fragmentacin de los datos e ndices de una tabla especfica.
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.
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:
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.
Sugerencia
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.
Determine la frecuencia con que debe ejecutar la instruccin DBCC
SHOWCONTIG. Mida la actividad diaria, semanal o mensual de las tablas.

Creacin y Mantenimiento de ndices 19
En la tabla siguiente se describen las estadsticas que devuelve la instruccin
DBCC SHOWCONTIG.
Estadstica Descripcin

Pginas recorridas Nmero de pginas en la tabla o el ndice.
Extensiones recorridas Nmero de extensiones en la tabla o el ndice.
Cambios de extensin Nmero de veces que la instruccin DBCC ha salido
de una extensin mientras recorra sus pginas.
Promedio de pginas por
extensin
Nmero de pginas por extensin en la cadena
de pginas.
Densidad de recorrido
[Cuenta ptima: Cuenta
real]

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.
Fragmentacin del
recorrido lgico
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.
Fragmentacin de recorrido
de extensin

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).
Promedio de bytes libres
por pgina
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.
Promedio de densidad de
pgina (completa)
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 } ]
}
]
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
ptima:Cuenta real]:
50.00% [1:2]
Fragmentacin del recorrido lgico: 0.00%
Fragmentacin de recorrido de
extensin:
50.00%
Promedio de bytes libres por pgina: 246.7
Promedio de densidad de pgina
(completa):
96.95%
Ejecucin de DBCC completada. Si hay mensajes de error,
consulte al administrador del sistema.

Sugerencia
Vea si estos resultados son
adecuados en un entorno
determinado.
Creacin y Mantenimiento de ndices 21
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

Objetivo del tema
Explicar el uso de la
instruccin DBCC
INDEXDEFRAG.
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.

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

Sintaxis DBCC INDEXDEFRAG
( { nombreBaseDeDatos | IdBaseDeDatos | 0 }
, { nombreTabla | IdTabla | 'nombreVista' | IdVista }
, { nombrendice | Idndice }
) [ WITH NO_INFOMSGS ]
Ejemplo 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)

Resultado Pages scanned Pages moved Pages removed
150

28 9
(1 filas afectadas)

Creacin y Mantenimiento de ndices 23
Opcin DROP_EXISTING
CREATE UNIQUE NONCLUSTERED INDEX U_OrdID_ProdID
ON [Order Details] (OrderID, ProductID)
WITH DROP_EXISTING, FILLFACTOR=65
CREATE UNIQUE NONCLUSTERED INDEX U_OrdID_ProdID
ON [Order Details] (OrderID, ProductID)
WITH DROP_EXISTING, FILLFACTOR=65
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

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.

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

Cambio de las caractersticas de un ndice Para su informacin
No ensee la instruccin
DBCC DBREINDEX.
DROP_EXISTING propor-
ciona ms funcionalidad.
La nica ventaja de DBCC
DBREINDEX es que
permite regenerar varios
ndices simultneamente.
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
Cmo se recopilan las estadsticas
Cmo se almacenan las estadsticas
Creacin de estadsticas
Actualizacin de estadsticas
Vista de las estadsticas

Objetivo del tema
Presentar los temas
de esta seccin.
Explicacin previa
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
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

Objetivo del tema
Explicar cmo SQL Server
recopila estadsticas.
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
Sales

state
state state
AL
AK
CA
CA
CA
CT
IL
IL
IL
IL
IL
MT
OR
OR
PA
TX
TX
WA
WA
WA
WI
WY
AL
AK
CA
CA
CA
CT
IL
IL
IL
IL
IL
MT
OR
OR
PA
TX
TX
WA
WA
WA
WI
WY
Paso
AL
CA
IL
IL
OR
TX
WA
WY
Paso n
0
1
2
3
4
5
6
7
statblob
statblob statblob
AL
CA
IL
IL
OR
TX
WA
WY
AL
CA
IL
IL
OR
TX
WA
WY

sysindexes

Objetivo del tema
Explicar cmo se alma-
cenan las estadsticas
en SQL Server.
Explicacin previa
Las estadsticas se alma-
cenan en la columna
statblob de la tabla del
sistema sysindexes.

Las estadsticas se almacenan en la columna statblob de la tabla del sistema
sysindexes.
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.
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
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

Objetivo del tema
Explicar cundo se crean
las estadsticas y cundo es
conveniente crearlas.
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.

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

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.

Para crear manualmente estadsticas en una tabla es necesario ser su
propietario.
Nota

Sintaxis parcial CREATE STATISTICS nombreEstadsticas ON {tabla| vista} (columna [,...n])
Creacin y Mantenimiento de ndices 32
Actualizacin de estadsticas
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

Objetivo del tema
Describir cmo SQL Server
determina la frecuencia
de actualizacin de las
estadsticas y cundo
actualizarlas.
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.

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

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

Para ver una lista de nombres y descripciones de ndices, ejecute el
procedimiento almacenado del sistema sp_helpindex con la tabla de nombres.
Nota

Creacin y Mantenimiento de ndices 34
Vista 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

Objetivo del tema
Explicar el modo de ver
la informacin de las
estadsticas.
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 Descripcin

Updated Fecha y hora en que las estadsticas se actualizaron por
ltima vez.
Rows Nmero de filas existentes en la tabla.
Rows sampled Nmero de filas muestreadas para la informacin estadstica.
Steps Nmero de pasos de distribucin.
Density Selectividad del prefijo de la primera columna del ndice
(no es frecuente).
Average key length Longitud promedio del prefijo de la primera columna del ndice.
All density Selectividad de un conjunto de prefijos de columnas de ndice
(frecuente).
Average length Longitud promedio de un conjunto de prefijos de columnas
de ndice.
Columns Nombre de los prefijos de columnas de ndice para los que
se muestran las columnas All density y Average length.
RANGE_HI_KEY Valor del lmite superior de un paso del histograma.
RANGE_ROWS Nmero de filas de la muestra comprendidas en un paso del
histograma, excluido el lmite superior.
Creacin y Mantenimiento de ndices 35
(continuacin)
Nombre de columna Descripcin

EQ_ROWS Nmero de filas de la muestra que tienen un valor
igual al lmite superior del paso del histograma.
DISTINCT_RANGE_ROWS Nmero de valores distintos en un paso del
histograma, excluido el lmite superior.
AVG_RANGE_ROWS 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
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

Objetivo del tema
Explicar cmo consultar
la tabla sysindexes para
obtener informacin acerca
de tablas e ndices.
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 Descripcin Valores

indid
(tipo de ndice)
Id. del ndice (tipo de ndice) 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 37
(continuacin)
Columna Descripcin Valores

OrigFillFactor
(fillfactor)
Valor de FILLFACTOR original
utilizado cuando se cre el
ndice
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.
minlen Tamao mnimo de una fila Valor entero.
xmaxlen Tamao mximo de una fila Valor entero.
maxirow Tamao mximo de una fila del
ndice no situada en el nivel de
hoja
Valor entero.
keys Descripcin de las columnas
de clave
Slo se aplica si la entrada es un ndice.
statversion Nmero de veces que se han
actualizado las estadsticas
Valor entero.
statblob Objeto largo binario de
estadsticas (BLOB)
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 indid reserved used origfillfactor name

2073058421 1 15 15 0 PK_Customers

(1 filas afectadas)

Creacin y Mantenimiento de ndices 38
Configuracin de ndices mediante 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

Objetivo del tema
Presentar el Asistente para
optimizacin de ndices.
Explicacin previa
Ya sea un usuario sin
experiencia o uno avan-
zado, 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.

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

Creacin y Mantenimiento de ndices 41
Consideraciones acerca del rendimiento
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

Objetivo del tema
Comentar consideraciones
acerca del rendimiento al
planear y crear 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.

También podría gustarte

  • DAFO
    DAFO
    Documento4 páginas
    DAFO
    ame_jac746603
    Aún no hay calificaciones
  • Practica 1 Introduccion A Ms Project
    Practica 1 Introduccion A Ms Project
    Documento6 páginas
    Practica 1 Introduccion A Ms Project
    ame_jac746603
    Aún no hay calificaciones
  • Intro SQL
    Intro SQL
    Documento37 páginas
    Intro SQL
    ame_jac746603
    Aún no hay calificaciones
  • Deontologia
    Deontologia
    Documento13 páginas
    Deontologia
    ame_jac746603
    Aún no hay calificaciones
  • BD Reserva
    BD Reserva
    Documento6 páginas
    BD Reserva
    ame_jac746603
    Aún no hay calificaciones
  • Actividad 02 - Alumno
    Actividad 02 - Alumno
    Documento16 páginas
    Actividad 02 - Alumno
    ame_jac746603
    Aún no hay calificaciones
  • Reglas de Voley
    Reglas de Voley
    Documento1 página
    Reglas de Voley
    ame_jac746603
    Aún no hay calificaciones
  • Consignas Ejercicio 1
    Consignas Ejercicio 1
    Documento1 página
    Consignas Ejercicio 1
    ame_jac746603
    Aún no hay calificaciones
  • Examen de Word
    Examen de Word
    Documento3 páginas
    Examen de Word
    ame_jac746603
    Aún no hay calificaciones
  • Cali Fica Do
    Cali Fica Do
    Documento1 página
    Cali Fica Do
    ame_jac746603
    Aún no hay calificaciones
  • Materiales de Practica
    Materiales de Practica
    Documento1 página
    Materiales de Practica
    ame_jac746603
    Aún no hay calificaciones
  • Cali Fica Do
    Cali Fica Do
    Documento1 página
    Cali Fica Do
    ame_jac746603
    Aún no hay calificaciones