El documento describe los índices de bases de datos y sus características. Los índices ayudan a encontrar datos más rápidamente al ordenar las columnas de una tabla. Existen varios tipos de índices como no-compuestos, compuestos, no-únicos, únicos, no-cluster y cluster. Los índices cluster ordenan físicamente los datos de una tabla y mejoran el rendimiento de consultas por valor único o rango.
2. Table scan
• Un table scan es una búsqueda en donde se leen todas las filas de una tabla
• Una tabla que no tenga índices creados, solamente puede hacer búsquedas a través
de un table scan
3. Indices
• Un índice es un objeto de base de datos que ayuda al servidor a encontrar un dato
más rápidamente
5. Crear y borrar índices
• Sintaxis simplificada para create :
create [unique] [ clustered | nonclustered ]
index index_name
on table_name (column1 [, column2] ... )
• Ejemplo:
create clustered index idx_c_titles_1
on titles (title_id)
• Sintaxis Simplicada para drop :
drop index table_name.index_name
• Ejemplo:
drop index titles.idx_c_titles_1
6. Atributos de los índices
• Tres atributos describen cada índice
– El número de columnas sobre las cuales se declara el índice
• Una columna – índice no-compuesto
• Múltiples columnas - índice compuesto
– Si el índice acepta o no valores duplicados
• Se permiten valores duplicados - índice no-único
• No se permiten valores duplicados - índice único
– Si están o no ordenados los datos en la tabla por el concepto del índice cuando la tabla
se crea
• Datos ordenados durante la creación - índice cluster
• Datos no ordenados durante la creación - índice no-cluster
7. Indice no-compuesto
• Un índice no-compuesto es un índice creado sobre una columna
– Ejemplo:
create index idx_authors_2
on authors(state)
• Apropiado cuando las consultas se hacen frecuentemente sobre una sola columna
– Ejemplo:
select * from authors
where state = "UT"
8. Indice compuesto
• Un índice compuesto es un índice creado sobre dos o más columnas
– Ejemplo:
create index idx_authors_3
on authors(au_lname, au_fname)
• Apropiado cuando las consultas se hacen sobre múltiples columnas
– Ejemplo:
select * from authors
where au_lname = "Ringer" and au_fname = "Anne"
9. Indice no-único
• Un Indice No-único es un índice que permite valores duplicados
– Ejemplo:
create index idx_authors_2
on authors(state)
• Apropriado cuando las consultas se hacen sobre valores duplicados
– Ejemplo:
select * from authors
where state = "UT"
10. Indice único
• Un índice único es un índice que no permite valores duplicados
– Ejemplo:
create unique index idx_u_authors_1
on authors(au_id)
• Apropiado cuando cada valor en la columna indizada debe ser único
– Ejemplo:
select * from authors
where au_id = "213-46-8915"
• Puede ser creado solamente sobre columnas que no tengan valores duplicados
11. Indice no-cluster
• Un índice no-cluster es un índice que utiliza un concepto de ordenamiento diferente a
como se realizó el almacenamiento de la tabla
– Ejemplo:
create nonclustered index idx_authors_4
on authors(state)
• Una tabla puede tener muchos índices no-cluster
• Apropiado para:
– Tablas que ya tienen un índice cluster
13. Indice cluster
• Un índice cluster es un índice que, cuando se crea, indica cómo están físicamente
almacenados los datos en la tabla
– Ejemplo:
create clustered index idx_c_authors_1
on authors(au_id)
• Una tabla sólo puede contener un índice cluster
• Típicamente mejora el rendimientos de las consultas que se hacen a una tabla
– Consultas con valor único (where state = ''CA'')
– Consultas por rango de valores (where price > $10.00)
• Puede dismuir el rendimiento en operaciones de modificación de los datos de una
tabla
– Esta reducción se debe a que se deben almacenar físicamente los datos
ordenados
15. Escritura de consultas que usen índices
• Los índice se usan solamente cuando una consulta hace referencia a columna(s)
indizada(s) en la cláusula where
• Si una tabla:
– Tiene dos columnas, y
– Cualquiera puede identificar una fila desada, y
– Una columna está indizada mientras la otra no, entonces
– Se debe utilizar la columna indizada en la cláusula where de la consulta
16. Ejemplo usando índices
• crear una tabla:
create table novels (
book_id int,
title varchar(40),
author varchar(40)
)
• Insertar tres filas:
insert into novels
values (1, "Congo", "M Crichton")
insert into novels
values (2, "The Client", "J Grisham")
insert into novels
values (3, "Jurassic Park", "M Crichton")
17. • Ejecutar las sentencias
create clustered index idx_c_novels_1 on
novels(book_id)
create unique index idx_u_novels_2 on
novels(author)
• ¿Qué sentencia falla? ¿Por qué?
________________________________________
• Borrar los objetos creados:
drop index novels.idx_c_novels_1
drop table novels
• crear una tabla:
create table novels (
book_id int,
title varchar(40),
author varchar(40)
)
• Insertar tres filas:
insert into novels
values (1, "Congo", "M Crichton")
insert into novels
values (2, "The Client", "J Grisham")
insert into novels
values (3, "Jurassic Park", "M Crichton")