Professional Documents
Culture Documents
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 ndice debemos saber
primero como se almacena la informacin internamente en las tablas de una base de datos.
Cada tabla se 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 (las pginas 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 ndice en que pgina est la 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
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
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 para manipular ndices son:
CREATE INDEX; DROP INDEX;
Que es un ndice?
La sintaxis para la creacin de ndices es la siguiente:
CREATE [UNIQUE] INDEX <nombre_indice> ON <nombre_tabla>( <nombre_campo> [ASC | DESC] {,<nombre_campo> [ASC | DESC]}) );
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.
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
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
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
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 NonClustered 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
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
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
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.
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.
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.
Devuelve info acerca de los campos que podran conformar un ndice.that are missing an index.