Sei sulla pagina 1di 34

Roco Contreras guila

Primer Semestre 2010


Que es un ndice?
Un ndice es una estructura de datos que
permite acceder a diferentes filas de una
misma tabla a travs de un campo (o campos
clave).

Un ndice permite un acceso mucho ms


rpido a los datos.
Que es un ndice?
Para entender lo que es un ndicedebemos
saber primero como se almacena la
informacininternamente en las tablas de una
base de datos.

Cada tablase divide en pginas de datos,


imaginemos un libro, podramos escribirlo en
"una sola hoja enorme" al estilo pergamino
egipcio, o bien en pginas a las que podemos
acceder rpidamente a travs de un ndice.
Que es un ndice?
Est idea es la que se aplica en el mundo de
las bases de datos, la informacin esta
guardada en una tabla (el libro) que tiene
muchas hojas de datos (laspginas del libro),
con un ndice en el que podemos buscar la
informacin que nos interesa.
Que es un ndice?
Si queremos buscar la palabra zapato en un
diccionario, qu hacemos?
Leemos todo el diccionario hasta encontrar la
palabra, con lo que nos habremos ledo el
diccionario enterito (seguro que aprenderamos
un montn!)
Buscamos en el ndiceen que pgina estla
letra z, y es en esa pgina donde buscamos.
Que es un ndice?
Veamos un ejemplo con nuestro ejercicio:
Que es un ndice?
Esta tabla no tiene ningn ndice creado, por
lo cual SQL Server tratar la tabla como un
HEAP.

Puesto que esta tabla no tiene ningn tipo de


ndice, es bastante eficiente para agregar
nuevas filas a la tabla pero muy ineficiente
para encontrar una fila especfica, esto se
debe a que es necesario leer toda la tabla
para obtener el resultado deseado.
(HEAP)
Un HEAP es un montn en espaol.

Un heap es una estructura de datos que almacena la posicin fsica en


la que se almacen cada nueva fila dentro de las pginas asignadas a la
tabla.
(HEAP)
Los recorridos de tablas o las lecturas secuenciales
de un montn se hacen recorriendo las pginas IAM
para buscar las extensiones que almacenan las
pginas de dicho montn.

Como la IAM representa las extensiones en el mismo


orden en el que se encuentran en los archivos de
datos, ello significa que los recorridos secuenciales
de un montn recorren secuencialmente cada
archivo. Utilizar las pginas IAM para establecer la
secuencia de recorrido tambin significa que las filas
del montn no se devuelven normalmente en el
orden en que se introdujeron.
Que es un ndice?
Que es un ndice?
Los ndices se actualizan automticamente cuando
realizamos operaciones de escritura en la base de datos.

Este es un aspecto muy importante de cara al


rendimiento de las operaciones de escritura, ya que
adems de escribir los datos en la tabla se escribirn
tambin en el ndice.

Las claves primarias son ndices.

Los nombres de los ndices deben ser nicos.


Que es un ndice?
Un nmero elevado de ndices har ms
lentas estas operaciones. Sin embargo, salvo
casos excepcionales, el beneficio que aportan
los ndices compensa (de largo) esta
penalizacin.
Que es un ndice?
Las sentencias de SQL paramanipular ndices
son:

CREATE INDEX;

DROP INDEX;
Que es un ndice?
La sintaxispara la creacin de ndices es la siguiente:

CREATE [UNIQUE] INDEX <nombre_indice>


ON <nombre_tabla>(
<nombre_campo> [ASC | DESC]
{,<nombre_campo> [ASC | DESC]})
);

Laplabra claveUNIQUE especifica que no pueden


existir claves duplicadas en el ndice.
ASC | DESC especifican el criterio de ordenacin
elegido, ascendente o descendente, por defecto es
ascendente.
Ejemplo
Creamos la tabla Cementerio, este ejemplo
crea un ndice nico en el campo
IDCementerio. Esto nos permitir buscar
mucho mas rpido por el campo IDCementerio
y nos asegurar que no tengamos dos
IDCementerio iguales.

CREATE UNIQUE INDEX UIX_CEMENTERIO_


IDCementerio
ON CEMENTERIO (IDCementerio);
Ejemplo
Para eliminar un ndice debemos emplear la
sentencia DROP INDEX.

DROP INDEX <nombre_tabla>.<nombre_indice>;

Ejemplo: Para eliminar el ndice creado


anteriormente.

DROP INDEX CEMENTERIO.UIX_CEMENTERIO_


IDCementerio;
ndices
Para obtener ms informacin sobre el acceso a
los datos requeridos para resolver la consulta
ejecutamos la siguiente consulta:
CHECKPOINT

DBCC DROPCLEANBUFFERS WITH NO_INFOMSGS


SET STATISTICS IO ON

Select * from Cementerio

SET STATISTICS IO OFF


ndices
Lo primero que pasa al ejecutar esta consulta
es que SQL Server escribe todos los cambios
pendientes al disco, la segunda instruccin
elimina todos los datos que tiene en
memoria.
ndices
La combinacin de estas dos instrucciones
obliga a SQL Server a leer todo desde disco
nuevamente

Es importante tener en cuenta que al ejecutar


DBCC DropCleanBuffers se produce un fuerte
impacto en el desempeo de todos los
usuarios, por lo que no se debe utilizar en
servidores de produccin.
ndices
La tercera instruccin nos permite obtener
informacin sobre las lecturas de datos
requeridas para contestar una consulta. El
resultado que se obtiene en el rea de
mensajes es:

Tabla 'Cementerio'. Nmero de


exploraciones 1, lecturas lgicas 0, lecturas
fsicas 0, lecturas anticipadas 0.
ndices
Para mejorar el desempeo de las consultas
se utilizan ndices, los ms utilizados son los
Clustered y Non-Clustered.

Existen otros 3 tipos de ndices que se utilizan


para mejorar los tiempos de acceso a datos
XML, a bsquedas de texto y de datos
espaciales.
ndices
ndices
Los Clustered Indexes son ndices que controlan
el orden fsico de las filas en la tabla, por lo
cual solo puede existir uno para cada tabla.

Los Non-Clustered indexes son ndices que


mantienen un sub conjunto de las columnas de
la tabla en orden. Estos ndices no modifican el
orden de las filas de la tabla, en lugar de esto
mantienen una lista ordenada de referencias a
filas de la tabla original.
ndices
Para ilustrar la diferencia entre estos 2 tipos
de ndices podemos decir que las pginas
blancas de la gua telefnica tienen un
clustered index por Apellido(s) y Nombres, con
lo cual puedo buscar de forma muy eficiente
el nmero de telfono de una persona si
conozco sus apellidos y su nombre, una vez
que lo encuentro obtendr su nmero de
telfono en forma inmediata pues el numero
est al lado del nombre.
ndices
En el caso de las pginas amarillas de la gua
telefnica la forma de buscar es un poco distinta,
en este caso busco por rubro. Primero busco en
un ndice, el cual me indica en qu pgina se
encuentra la lista de empresas que satisfacen la
condicin que busco.

Esto mismo es lo que pasa cuando utilizo un


ndice Non-Clustered index una vez que encuentro
lo que quiero en el ndice debo ir a leer la fila
especfica para obtener el resto de los datos.
ndices
El clustered index controla el orden fsico de
las filas en la tabla, a diferencia de los
ndices Non-Clustered que funcionan como
una lista ordenada de identificadores de fila.
ndices
Todas las tablas que tienen un clustered index
tienen un nodo raz y muchos nodos en los
niveles intermedios, estos a su vez pueden
apuntar a nodos hojas o a otros nodos
intermedios.

Esta estructura forma un rbol (B-Tree) que


permite encontrar cualquier fila en forma
eficiente.
ndices
La bsqueda parte desde el nodo raz, este
nodo tiene una lista de llaves, se comparan
estas llaves para encontrar el nodo de nivel
intermedio que contenga un rango de llaves
que cubra la llave que se est buscando.

Luego se repite el proceso en los nodos


intermedios hasta que se encuentre la pgina
de datos que contenga el la fila especfica.
ndices
Al igual que en el caso de los clustered index, los
non-clustered index tienen un nodo raz y muchos
nodos en los niveles intermedios, estos a su vez
pueden apuntar a nodos hojas o a otros nodos
intermedios.

La diferencia se presenta en los nodos hoja, estos


tienen almacenados solo el Id del registro y no todo
el registro, por lo que se hacer necesario hacer una
bsqueda sobre el ndice cluster o sobre el heap
para obtener el resto de las columnas de la fila.
ndices
Como descubrir ndices
faltantes
Cada vez que SQL ejecuta una consulta,
internamente determina si esa consulta poda
haber sido optimizada con el uso de algn
ndice inexistente al momento del query (por
eso es missing index) y cuando ejecutemos
algunas de estas vistas dinmicas nos dar
dicha informacin.
Como descubrir ndices
faltantes
sys.dm_db_missing_index_group_stats
Regresa informacin acerca de grupos de ndices
no existentes, por ejemplo, la performance que se
podra obtener implementando un grupo
especfico de ndices.

ys.dm_db_missing_index_groups Regresar
informacin acerca de un grupo especfico de
indices no declarados, como el identificador de
grupo y el identificador de todos los ndices que
estn contenidos en dicho grupo.
Como descubrir ndices
faltantes
sys.dm_db_missing_index_details

devuelve informacin detallada acerca de un


posible ndice a ser creado, por ejemplo
nombre e identificador de la tabla donde el
ndice podra ser creado y las columnas y
tipos que conformaran dicho ndice.
Como descubrir ndices
faltantes
sys.dm_db_missing_index_columns
Devuelve info acerca de los campos que
podran conformar un ndice.that are missing
an index.

Potrebbero piacerti anche