You are on page 1of 24

Los ndices

Un ndice es un conjunto de valores claves y apuntadores


lgicos que permite ejecutar bsqueda de registros de modo
similar a la manera como buscamos un tema en el ndice
analtico de un libro. Por lo general, todas las consultas se
ejecutan ms rpido cuando se utilizan ndices. En este
captulo veremos por qu y cmo crear ndices.

Empresa Editora MACRO 359

Conozca y utilice MS SQL Server 2005

Esta pgina se ha dejado en blanco intencionalmente.

360 Empresa Editora MACRO

Los ndices

Captulo 11
Los ndices
Contenido

Indices
9

Cmo se almacenan los datos?

Cmo se accede a los datos?

Criterios para crear ndices


9

Razones para crear ndices

Razones para no crear ndices

Columnas a indexar

Columnas que no deben indexarse

Tipos de ndices
9

Indice clustered

Indice nonclustered

Cmo se accede a los datos mediante los ndices?


9

Proceso de bsqueda indexada

Creacin de ndices La instruccin CREATE INDEX


9

Ejercicio 111: Creacin de ndice clustered

Ejercicio 112: Creacin de ndice nonclustered Uso de sp_helpindex

Criterios al crear ndices UNIQUE

Cmo determinar si una columna tiene valores duplicados?

Creacin de ndices compuestos

Obtencin de la deinicin de un ndice

Eliminacin de ndices Uso de DROP INDEX


9

Ejercicio 113: Uso de DROP INDEX

Empresa Editora MACRO 361

Conozca y utilice MS SQL Server 2005

Las opciones FILLFACTOR y PAD_INDEX


9

Ejercicio 114: Uso de FILLFACTOR

Determinacin de la fragmentacin de una tabla ndice

Ejercicio 115: Uso de DBCC SHOWCONTIG

Obtencin del ID de una tabla La funcin OBJECT_ID()

Obtencin del ID de un ndice

Ejercicio 116: IDs de tabla ndice

Eliminacin de la fragmentacin

Ejercicio 117: Reconstruccin de ndice

Query Optimizer El Optimizador de consultas


9

Anlisis de los ndices

SET SHOWPLAN_ALL

SET SHOWPLAN_TEXT

SET STATISTICS IO

362 Empresa Editora MACRO

Los ndices

Los ndices
Un ndice es un conjunto de valores claves y apuntadores lgicos que permite
ejecutar bsqueda de registros de modo similar a la manera como buscamos un
tema en el ndice analtico de un libro. Por lo general, todas las consultas se
ejecutan ms rpido cuando se utilizan ndices. En este captulo veremos por qu y
cmo crear ndices.

Indices
Cuando la base de datos no tiene ndices, SQL Server localiza los datos leyendo
cada pgina de datos en cada tabla que especifica en su instruccin SQL. Este
examen de la tabla (leer cada pgina de datos) puede ser un excelente mtodo
para la recuperacin de datos. Por ejemplo, si una tabla es pequea, o si esta
accesando una porcin grande de ella, una exploracin podra ser muy bien el
mejor plan para acceder a los datos; sin embargo, con mucha frecuencia esto es
mucho mas rpido con un ndice. Adems, al utilizar ndices puede acelerar las
combinaciones (joins) entre tablas.
Otra razn para crear un ndice es reforzar la identificacin de registros de manera
nica. Tener dos filas idnticas en una tabla no es una condicin de error. Sin
embargo, es probable que sta no sea la forma en que la mayora de la gente
quiere almacenar datos. Imagine un sistema que lleva un registro de clientes. Si no
puede distinguir a los clientes, podra tener dificultades en conservarlos si les
factura de manera incorrecta. Tiene varias opciones para identificar a sus clientes
de manera nica. Podra asignarle nmeros, combinar sus nombres y fechas de
nacimiento, emplear sus nmeros de tarjeta de crdito, o utilizar algn otro valor o
conjunto de valores. Sin importar la opcin que haya seleccionado, la forma de
indicarle a SQL Server su eleccin es por medio de un ndice nico, que es un ndice
que no permite valores duplicados.

Empresa Editora MACRO 363

Conozca y utilice MS SQL Server 2005

Cmo se almacenan los datos?


Tenga en cuenta lo siguiente respecto a la forma cmo se almacenan los datos:

Un heap (tabla sin ndices o archivo plano) es una coleccin de pginas de los
datos que contienen las filas para una tabla:

Los datos para cada tabla se guarda en una coleccin de 8 pginas de datos
(cada una con capacidad para 8 KB), que es conocida como un extent.

Las filas de los datos no se guardan en un orden particular, y no hay ningn


orden particular para la sucesin de las pginas de los datos.

Una fila se almacena completamente en una pgina, y no puede dividirse entre


dos pginas.

Cmo se accede a los datos?


SQL Server accede a los datos de una de estas dos maneras:

Examinando todos las pginas de datos de la tabla. Este proceso se conoce


como Table Scan. Cuando SQL Server realiza un Table Scan, l:
-

Lee desde el principio de la tabla.

Examina pgina a pgina todas las filas de la tabla.

Extrae las filas que corresponden al criterio de la consulta.

Usando los ndices. Este proceso se conoce como Index Seek. Cuando SQL
Server usa un indice, l:
-

Atraviesa la estructura de rbol del ndice para encontrar las filas que la
consulta requiere.

Extrae solo las filas que se corresponden con el criterio de la consulta.

Cuando se enva una consulta, SQL Server determina primero si un ndice existe.
Entonces, el Query Optimizer, el componente responsable de generar el plan de
ejecucin ptimo para la consulta, determina si es mas eficaz examinar la tabla o
utilizar el ndice para acceder a los datos.

364 Empresa Editora MACRO

Los ndices

Criterios para crear ndices


Si est considerando crear un ndice, evale dos factores para asegurar que la
utilizacin del ndice ser ms eficaz que la lectura directa de la tabla examinada: la
naturaleza de los datos y la naturaleza de las consultas basadas en la tabla.

Razones para crear ndices


Los ndices aceleran la recuperacin de los datos. Por ejemplo, sin ningn ndice,
tendramos que recorrer todas las pginas de un libro hasta encontrar la
informacin que estamos buscando.

Refuerzan la unicidad de las filas.

Incrementan la velocidad de recuperacin de datos:


-

Los joins se ejecutan mas rpido si la columna llave fornea est indexada.

Las consultas ORDER BY y GROUP BY se ejecutan mas rpido.

Razones para no crear ndices


En general, cuando ejecutamos operaciones de lectura, los ndices favorecen el
proceso; cuando las operaciones son de escritura, los ndices hacen que el
rendimiento del sistema disminuya.

Consumen espacio de disco.

Producen sobrecarga en el sistema.


-

Cuando se modifican datos de columnas indexadas, el ndice es actualizado


automticamente para reflejar los cambios.

Columnas a indexar

Clave primaria.

Clave fornea.

Columnas en las que se busca por rango de valores.

Columnas que se recuperan ordenadas.

Empresa Editora MACRO 365

Conozca y utilice MS SQL Server 2005

Columnas que no deben indexarse

Columnas en las que no se ejecuta bsqueda.

Columnas con pocos valores nicos o que retornan un gran porcentaje de filas.

Columnas de tipo bit, text o image.

Tipos de ndices
Hay dos opciones para el almacenamiento fsico de sus ndices:

ndice agrupado (clustered)

ndice no agrupado (nonclustered)

Indice clustered

Ordena fsicamente la tabla. Las filas de la tabla se ordenan segn el orden de


los valores claves del ndice clustered.

Solo se puede definir un ndice clustered por cada tabla.

Indice nonclustered

Es el tipo de ndice por defecto.

Se reconstruyen automticamente cuando se crea, se elimina o se redefine el


ndice clustered.

Observacin:

Se pueden definir hasta 249 ndices por tabla.

Siempre crear el ndice clustered antes que los ndices nonclustered.

366 Empresa Editora MACRO

Los ndices

Cmo se accede a los datos mediante los ndices?


Se tiene la tabla Empleado con las columnas: paterno y fechaNac entre otras.
Se ha definido un ndice clustered por la columna paterno, y un ndice
nonclustered por la columna fechaNac.

P1
alva
alvarado
barcena

...
...
...

P2
castro
colonio
davila

26 oct 80
02 may 80
26 feb 79

P3
egoavil
jauregui
matos

...
...
...

...
...
...

P100
alva
castro
egoavil

P1
P2
P3

P102
alva
mora

Pginas de la tabla.
Leaf level del ndice
clustered.

P4
mora
novoa
quiroz

16 nov 79
15 abr 78
21 ene 80
P5
suarez
valencia
zavala

13 abr 79
07 jul 80
13 nov 80

...
...
...

02 mar 80
25 dic 80
13 set 81

P101
mora
suarez

P100
P101

...
...
...

17 jul 78
17 oct 79
01 mar 79

Pginas de la tabla.
Leaf level del ndice
clustered.

P4
P5

Non leaf level


del ndice clustered.

Non leaf level


del ndice clustered.

novoa?

Empresa Editora MACRO 367

Conozca y utilice MS SQL Server 2005

Los datos en las tablas se almacenan en pginas, donde cada una de stas tiene
capacidad para 8KB. Por lo tanto, la cantidad de registros que puede contener una
pgina depende de la longitud del registro.

Un registro debe estar contenido completamente en una pgina; es decir, que


no puede estar dividida entre dos pginas.

Las pginas de una tabla se organizan en extents, conjunto de 8 pginas


contiguas, por lo que un extent que est siendo utilizado por una tabla ya no
puede ser utilizado por otra.

As, como en la base de datos tenemos pginas de tablas, tambin se tiene


pginas de ndice.

Todos los ndices, con la excepcin del ndice clustered, estn formados
completamente por pginas de ndice organizadas en dos niveles: el leaf level
( nivel de las hojas), y el non leaf level ( nivel de las ramas).

El leaf level est formado por pginas de ndice, donde cada pgina de ndice
contiene los valores claves del ndice ordenados. Por ejemplo, en el caso de un
ndice por apellido paterno, las pginas del ndice contienen todos los apellidos
paternos ordenados alfabticamente; en el caso de un ndice por fecha,
contienen todas las fechas ordenadas cronolgicamente.

Las pginas de ndice del non leaf level almacenan los valores claves iniciales
de cada pgina del nivel inmediato superior, con un puntero que seala a la
pgina correspondiente.

En el caso especial del ndice clustered, como ste ordena fsicamente la tabla,
no existen pginas de ndice en el leaf level de un ndice clustered. Los punteros
del non leaf level del ndice clustered apuntan directamente a las pginas de la
tabla, ya que stas tienen los valores claves ya ordenados.

En el diagrama anterior se muestra un ndice clustered por apellido paterno.

Las pginas P1 a P5 son pginas de la tabla, y forman el leaf level del ndice
clustered.

Cada pgina del non leaf level est formada por los valores claves iniciales de
las pginas del nivel inmediato superior. Asi, la pgina P100 est formada por
los valores claves alva, castro y egoavil que son los valores iniciales en las
pginas P1, P2 y P3 respectivamente.

Cuando se busca un valor clave utilizando un ndice, la bsqueda se inicia en la


raz del ndice.

368 Empresa Editora MACRO

Los ndices

Proceso de bsqueda indexada


Supongamos que estamos buscando el registro de alguien cuyo apellido es novoa.
La bsqueda se ejecuta de la siguiente manera:
La bsqueda se inicia en la raz del ndice (P102), comparando la cadena buscada
novoa con los valores claves en la pgina de ndice.
1.

Ubicacin: Raz del ndice, pgina de ndice P102, valor clave alva
Comparacin: es novoa >= alva?
Resultado: true
Accin: ir al siguiente valor clave

2.

Ubicacin: Raz del ndice, pgina de ndice P102, valor clave mora
Comparacin: es novoa >= mora?
Resultado: true
Accin: mora es el timo valor clave de la pgina, entonces ir a la pgina a la
que apunta el valor clave mora (P101)

3.

Ubicacin: Non leaf level del ndice, pgina de ndice P101, valor clave mora
Comparacin: es novoa >= mora?
Resultado: true
Accin: ir al siguiente valor clave

4.

Ubicacin: Non leaf level del ndice, pgina de ndice P101, valor clave suarez
Comparacin: es novoa >= suarez?
Resultado: false
Accin: ir a la pgina a la que apunta el valor clave anterior mora (P4)

5.

Ubicacin: Leaf level del ndice, pgina de tabla P4


Accin: recorrer la pgina de tabla hasta encontrar el valor buscado novoa.
Cuando se alcance el valor buscado, detener la bsqueda.

Empresa Editora MACRO 369

Conozca y utilice MS SQL Server 2005

Creacin de ndices La instruccin CREATE INDEX


Utilice la sentencia CREATE INDEX para crear los ndices. Cuando cree ndice en una
o ms columnas en una tabla, considere lo siguiente:

SQL Server crea los ndices automticamente cuando define una restriccin
PRIMARY KEY o UNIQUE en una tabla.

Debe ser el dueo de la tabla para poder ejecutar la sentencia CREATE NDEX.

SQL Server guarda la informacin de la definicin del ndice en la tabla de


sistema sysindexes.

Antes de crear un ndice en una columna, determine si la columna ya tiene


ndices.

Procure que sus ndices sean pequeos limitando los valores claves a una o dos
columnas. Los indices pequeos son ms eficaces que los ndices con los
valores claves grandes.

Sintxis
CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX
nombre_ndice
ON nombre_tabla( columna(s) )

Ejercicio 111: Creacin de ndice clustered


Crear un ndice UNIQUE en la columna email de la tabla Correo para garantizar la
unicidad de los valores de la columna.

USE MarketPERU
go
CREATE UNIQUE CLUSTERED INDEX ucl_email
ON Correo(email)
go

370 Empresa Editora MACRO

Los ndices

Para verificar puede ejecutar la siguiente instruccin:

sp_help Correo
go

Un ndice UNIQUE no permite valores duplicados. Si la columna a indexar contiene


valores duplicados, la creacin del ndice falla.

Empresa Editora MACRO 371

Conozca y utilice MS SQL Server 2005

Ejercicio 112: Creacin de ndice nonclustered Uso de sp_helpindex


Crear un ndice nonclustered formado por los valores de las columnas fechaSalida
y transportista de la tabla Guia.

CREATE INDEX ncl_fecha_transportista


ON Guia(fechaSalida, transportista)
go
Para obtener informacin sobre los ndices de una tabla ejecute la siguiente
instruccin.

sp_helpindex Guia
go

372 Empresa Editora MACRO

Los ndices

Criterios al crear ndices UNIQUE


Genere un ndice UNIQUE para un ndice clustered o nonclustered cuando el dato es
inherentemente nico.
Sin embargo, si la singularidad unicidad debe reforzarse, cree una restriccin
PRIMARY KEY o UNIQUE en la columna en lugar de crear un indice UNIQUE. Cuando
crea un indice UNIQUE, considere lo siguiente:

SQL Server crea el ndice UNIQUE automticamente en la columna definida con


restriccin PRIMARY KEY o UNIQUE.

Si una tabla ya contiene datos, SQL Server verifica que no existan valores
duplicados antes de crear el ndice.

SQL Server verifica los valores duplicados cada vez que utiliza la sentencia
INSERT o UPDATE. Si existen valores con claves duplicadas, SQL Server cancela
la sentencia y retorna un mensaje del error con el primer duplicado encontrado.

Asegrese que cada fila tiene un nico valor; dos filas no pueden tener el
mismo nmero de identificacin si un ndice nico se crea en esa columna. Esta
regulacin asegura que cada ocurrencia de la entidad se identifica
singularmente.

Cree los ndices UNIQUE solo en columnas en que la integridad de la entidad


puede reforzarse. Por ejemplo, no se nos ocurrira crear un ndice UNIQUE en la
columna paterno de una tabla Trabajador porque algunos trabajadores
pueden tener el mismo apellido paterno.

Cmo determinar si una columna tiene valores


duplicados?
Si existen valores duplicados cuando crea un ndice UNIQUE, la sentencia CREATE
INDEX falla. SQL Server devuelve un mensaje del error con el primer duplicado
encontrado, pero otros valores duplicados tambin pueden existir. Utilice el
siguiente formato de consulta para determinar si la columna a indexar de manera
nica tiene valores duplicados.

SELECT columna_a_indexar, COUNT( columna_a_indexar )


FROM nombre_tabla
GROUP BY columna_a_indexar
HAVING COUNT( columna_a_indexar ) > 1
ORDER BY columna_a_indexar

Empresa Editora MACRO 373

Conozca y utilice MS SQL Server 2005

Creacin de ndices compuestos


Un ndice compuesto es aquel cuyos valores claves se forman con datos de dos o
mas columnas de la misma tabla. Tenga en cuenta lo siguiente al crear ndices
compuestos:

Puede combinar hasta 16 columnas en un ndice compuesto. La suma de las


longitudes de las columnas que constituyen el ndice compuesto no puede
exceder de 900 bytes.

Todas las columnas en un ndice compuesto deben ser de la misma tabla.

Defina la primera columna como nica. La primera columna definida en la


sentencia CREATE NDEX es referenciada con el orden ms alto.

La clusula WHERE de una consulta debe referenciar a la primera columna del


ndice compuesto para que la consulta optimice el uso del ndice compuesto.

Un ndice en (columna1, columna2) no es igual que un ndice en (columna2,


columna1). Cada uno tiene un orden de columna distintas. La columna que
contiene los datos ms selectivos o la que devuelve el porcentaje ms bajo de
filas determina el orden de las columnas indexadas.

Utilice los ndices compuestos para aumentar el rendimiento de las consultas y


reducir el nmero de ndices que crea en una tabla.

Obtencin de la definicin de un ndice


La informacin sobre ndices se guarda en la tabla de sistema sysindexes. Para
obtener informacin sobre ndices se puede ejecutar

sp_helpindex nombre_tabla
sp_help nombre_tabla

374 Empresa Editora MACRO

Los ndices

Eliminacin de ndices Uso de DROP INDEX


Use la sentencia DROP INDEX para eliminar un ndice en una tabla.

Sintxis
DROP INDEX nombre_tabla.nombre_ndice [,...]
Cuando elimine un ndice, considere los siguiente:

No puede usar la sentencia DROP INDEX en ndices que se crean con las
restricciones PRIMARY KEY o UNIQUE. Debe eliminar las restricciones para
eliminar estos ndices.

Cuando elimina una tabla, se eliminan todos los ndices de esa tabla.

Cuando elimina un ndice clustered, todos los ndices nonclustered en la tabla


se reconstruyen automticamente.

Debe encontrarse en la base de datos en la que un ndice reside para poder


eliminar el ndice.

La sentencia DROP INDEX no puede ser usada en las tablas del sistema.

Ejercicio 113: Uso de DROP INDEX


La instruccin siguiente elimina el ndice ncl_fecha_transportista de la tabla
Guia de la base de datos MarketPERU.

USE MarketPERU
go
DROP INDEX Guia.ncl_fecha_transportista
go

Empresa Editora MACRO 375

Conozca y utilice MS SQL Server 2005

Las opciones FILLFACTOR y PAD_INDEX


La opcin FILLFACTOR determina cun llenas estarn las pginas del ndice.
Si las pginas de un ndice estn llenas, una operacin INSERT o UPDATE puede
provocar un reacomodo de los datos en muchas pginas del ndice y de la tabla. Por
ejemplo, en un ndice clustered por apellido paterno, la insercin de un nueva fila
con el valor avila para el apellido paterno puede ocasionar que se tengan que
reacomodar todas las filas de la tabla si es que las pginas de datos estn llenas.
Imagnese el efecto de la insercin de 1000 filas en una tabla con esas
caractersticas.
La especificacin de un valor de FILLFACTOR adecuado minimiza el nmero de
pginas afectadas por la operaciones que modifican datos. FILLFACTOR permite
especificar el espacio libre en cada pgina para las operaciones de insercin y
modificacin de datos. Para el ejemplo anterior, si la pgina en la que se debe
insertar el registro de avila tiene espacio suficiente, la insercin afectar solo esa
pgina. Por supuesto que con el tiempo, el espacio disponible en las pginas se va
consumiendo, pero siempre tenemos la opcin de recosntruir el ndice con el valor
de FILLFACTOR adecuado.
Al usar la opcin FILLFACTOR, considere lo siguiente:

El rango de FILLFACTOR va de 1 a 100 por ciento.

El valor predefinido es 0. Este valor indica que las pginas del ndice a nivel de
las hojas deben llenarse al 100 por ciento.

El valor predefinido para FILLFACTOR puede cambiarse a nivel del servidor


usando el procedimiento almacenado del sistema sp_configure.

La tabla de sistema sysindexes guarda el ltimo valor aplicado para


FILLFACTOR, junto con otra informacin del ndice.

El valor de FILLFACTOR se especifica en porcentaje. El valor cun llenas deben


estar las pginas de ndice al nivel de las hojas al momento de crear el ndice.
Por ejemplo, un FILLFACTOR de 65 por ciento indica que debe dejarse 35 por
ciento de espacio reservado para nuevas filas. El tamao de la fila determina
cuntas filas pueden encajar en o pueden llenar la pgina para el porcentaje
FILLFACTOR especificado.

Use la opcin FILLFACTOR en tablas en que se insertan muchas filas o cuando


en el ndice clustered se modifican frecuentemente los valores claves.

376 Empresa Editora MACRO

Los ndices

Use un valor bajo de FILLFACTOR para transacciones en lnea que se procesan


en las aplicaciones OLTP.

Use un valor de FILLFACTOR alto valor para el almacenamiento de datos de


sistemas de apoyo a las toma de decisiones.

Ejercicio 114: Uso de FILLFACTOR


CREATE INDEX ncl_fecha_transportista
ON Guia(fechaSalida, transportista)
WITH FILLFACTOR = 70
go
Especifica que las pginas del ndice ncl_fecha_transportista de la tabla Guia
tendrn 30% de espacio libre para futuras inserciones. El espacio libre se define
para el nivel de las hojas. En el nivel de las ramas, el espacio libre ser el
equivalente a dos entradas del ndice.
Si desea que el porcentaje de espacio libre sea el mismo a nivel de hojas y ramas,
ejecute:

CREATE INDEX ncl_fecha_transportista


ON Guia(fechaSalida, transportista)
WITH FILLFACTOR, PAD_INDEX = 70
go

Empresa Editora MACRO 377

Conozca y utilice MS SQL Server 2005

Determinacin de la fragmentacin de una tabla


ndice
Las tablas sumamente voltiles, es decir, aquellas que sufren gran cantidad de
modificaciones y con bastante frecuencia suelen fragmentarse muy rpido, ya que
SQL Server busca extents libres para almacenar la nueva data.
Para averiguar cuan fragmentada est una tabla ndice, y si las pginas de datos
e ndices estn llenas utilice la instruccin DBCC SHOWCONTIG.

Sintxis
DBCC SHOWCONTIG( nombre_tabla | id_tabla
[ , nombre_ndice | id_ndice ] )

Ejercicio 115: Uso de DBCC SHOWCONTIG


DBCC SHOWCONTIG(Guia_detalle)
go
DBCC SHOWCONTIG entrega un reporte con los siguientes datos:
DBCC SHOWCONTIG scanning 'GUIA_DETALLE' table...
Table: 'GUIA_DETALLE' (2073058421); index ID: 1, database ID: 8
TABLE level scan performed.
- Pages Scanned................................: 4
- Extents Scanned..............................: 0
- Extent Switches..............................: 0
- Avg. Pages per Extent........................: 0.0
- Scan Density [Best Count:Actual Count].......: 0.00% [0:0]
- Logical Scan Fragmentation ..................: 25.00%
- Extent Scan Fragmentation ...................: 0.00%
- Avg. Bytes Free per Page.....................: 0.0
- Avg. Page Density (full).....................: 98.13%
DBCC execution completed. If DBCC printed error messages, contact
your system administrator.

378 Empresa Editora MACRO

Los ndices

Extent Switches indica el nmero de "saltos" de un extent a otro cuando DBCC


recorre las pginas de la tabla ndice. Un valor de 0 (cero) indica que DBCC
encontr que los extents de la tabla ndice son contiguos.
En Scan Density, Best Count indica el nmero ideal de "saltos" de extents cuando
DBCC recorre las pginas de la tabla ndice; Actual Count indica el nmero de
"saltos" ejecutados durante el recorrido. En una tabla ndice sin fragmentacin, el
valor de Scan Density es 100% 0%. Cuando el valor es menor que 100% ya
presenta fragmentacin.

Obtencin del ID de una tabla La funcin OBJECT_ID()


Sintxis
SELECT OBJECT_ID( 'nombre_tabla' )

Obtencin del ID de un ndice


Sintxis
SELECT id FROM sysindexes
WHERE name = 'nombre_ndice'

Ejercicio 116: IDs de tabla ndice


SELECT OBJECT_ID('Guia')
go
SELECT id FROM sysindexes
WHERE name = 'ncl_fecha_transportista'
go

Empresa Editora MACRO 379

Conozca y utilice MS SQL Server 2005

Eliminacin de la fragmentacin
La fragmentacin se elimina reconstruyendo el ndice clustered con un valor de
FILLFACTOR adecuado.

Ejercicio 117: Reconstruccin de ndice


CREATE UNIQUE CLUSTERED INDEX ucl_email
ON Correo(email)
WITH DROP_EXISTING, FILLFACTOR = 50
go
Elimina y reconstruye el ndice ucl_email. Esta forma de la sentencia CREATE
INDEX permite redefinir un ndice. Puede redefinir el tipo de ndice, las columnas a
indexar, y las opciones de indexacin.

380 Empresa Editora MACRO

Los ndices

Query Optimizer El Optimizador de consultas


Cuando se ejecuta una consulta, SQL Server determina si la columna a analizar
est indexada. Si existe un ndice, el Query Optimizer revisa las estadsticas del
ndice para determinar si la consulta se resolver de acuerdo a uno de los planes
siguientes:

Table scan, la consulta lee las pginas de datos de la tabla hasta encontrar los
datos solicitados.

Index search, la consulta utiliza el ndice para buscar los datos solicitados

La informacin estadstica del ndice est formada por la distribucin de valores


claves de la columna indexada, y permite determinar el grado de selectividad del
ndice. Es creada automticamente cuando el ndice se crea.

Anlisis de los ndices


Las siguientes sentencias permiten efectuar un seguimiento de los ndices para
evaluar su rendimiento.

SET SHOWPLAN_ALL
SET SHOWPLAN_ALL ON | OFF
Cuando se especifica, SQL Server no ejecuta las instrucciones Transact-SQL. En vez
de ello, proporciona informacin detallada acerca de cmo las instrucciones son
ejecutadas, y estima los recursos a utilizar para ejecutarlas.

SET SHOWPLAN_TEXT
SET SHOWPLAN_TEXT ON | OFF
Cuando se especifica, SQL Server no ejecuta las instrucciones Transact-SQL. En vez
de ello, proporciona informacin detallada acerca de cmo las instrucciones son
ejecutadas.
Empresa Editora MACRO 381

Conozca y utilice MS SQL Server 2005

SET STATISTICS IO
SET STATISTICS IO ON | OFF
Cuando se especifica, SQL Server muestra informacin acerca de la actividad de
disco generada por las instrucciones Transact-SQL.

382 Empresa Editora MACRO

You might also like