Professional Documents
Culture Documents
Los ndices
Captulo 11
Los ndices
Contenido
Indices
9
Columnas a indexar
Tipos de ndices
9
Indice clustered
Indice nonclustered
Eliminacin de la fragmentacin
SET SHOWPLAN_ALL
SET SHOWPLAN_TEXT
SET STATISTICS IO
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.
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.
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.
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.
Los ndices
Los joins se ejecutan mas rpido si la columna llave fornea est indexada.
Columnas a indexar
Clave primaria.
Clave fornea.
Columnas con pocos valores nicos o que retornan un gran porcentaje de filas.
Tipos de ndices
Hay dos opciones para el almacenamiento fsico de sus ndices:
Indice clustered
Indice nonclustered
Observacin:
Los ndices
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
novoa?
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.
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.
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.
Los ndices
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.
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.
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) )
USE MarketPERU
go
CREATE UNIQUE CLUSTERED INDEX ucl_email
ON Correo(email)
go
Los ndices
sp_help Correo
go
sp_helpindex Guia
go
Los ndices
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.
sp_helpindex nombre_tabla
sp_help nombre_tabla
Los ndices
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.
La sentencia DROP INDEX no puede ser usada en las tablas del sistema.
USE MarketPERU
go
DROP INDEX Guia.ncl_fecha_transportista
go
El valor predefinido es 0. Este valor indica que las pginas del ndice a nivel de
las hojas deben llenarse al 100 por ciento.
Los ndices
Sintxis
DBCC SHOWCONTIG( nombre_tabla | id_tabla
[ , nombre_ndice | id_ndice ] )
Los ndices
Eliminacin de la fragmentacin
La fragmentacin se elimina reconstruyendo el ndice clustered con un valor de
FILLFACTOR adecuado.
Los ndices
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
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
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.