190 likes | 334 Views
Bases de Datos Índices. 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. Indices.
E N D
Table scan • Un table scanesunabúsquedaen donde se leentodaslasfilas de unatabla • Unatablaque no tengaíndicescreados, solamentepuedehacerbúsquedas a través de un table scan
Indices • Un índicees un objeto de base de datosqueayuda al servidor a encontrar un datomásrápidamente
authors table (data pages) Index pages rowptr pgptr key rowptr pgptr PAGE 1007 PAGE 1305 PAGE 1001 Bennet Karsen Bennet 1876, 1 1421, 1 1421, 1 1311 1132 1007 Greane Karsen 1876, 1 1242, 4 1305 1133 Hunter Smith 1242, 1 1242, 1 1062 1127 (more pages) PAGE 1132 PAGE 1133 PAGE 1127 PAGE 1241 PAGE 1242 PAGE 1421 PAGE 1409 Bennet Hunter Greane 1421, 1 1242, 1 1242, 4 18 10 14 21 Hunter Bennet Dull O’Leary Green Chan Jenkins 1421, 2 1241, 4 1129, 3 (more pages) 15 22 11 19 Ringer Smith Green Greene (more pages) Greene Dull 1409, 2 1409, 1 White White Ringer Ringer 20 16 12 23 Edwards 1018, 5 13 17 Jenkins Greane Estructura de un Indice : Caso de Estudio create index idx_authors_2 on authors(au_lname) key
Crear y borrar índices • Sintaxissimplificadapara create : create [unique] [ clustered | nonclustered ] indexindex_name ontable_name (column1 [, column2] ... ) • Ejemplo: create clustered index idx_c_titles_1 on titles (title_id) • SintaxisSimplicadapara drop : dropindextable_name.index_name • Ejemplo: drop index titles.idx_c_titles_1
Atributos de los índices • Tresatributosdescribencadaíndice • El número de columnassobrelascuales se declara el índice • Unacolumna – índice no-compuesto • Múltiplescolumnas - índicecompuesto • Si el índiceacepta o no valoresduplicados • Se permitenvaloresduplicados - índice no-único • No se permitenvaloresduplicados - índiceúnico • Si están o no ordenados los datos en la tablapor el concepto del índicecuando la tabla se crea • Datosordenadosdurante la creación - índice cluster • Datos no ordenadosdurante la creación - índice no-cluster
Indice no-compuesto • Un índice no-compuestoes un índicecreadosobreunacolumna • Ejemplo: create index idx_authors_2 on authors(state) • Apropiadocuandolasconsultas se hacenfrecuentementesobreuna sola columna • Ejemplo: select * from authors where state = "UT"
Indice compuesto • Un índicecompuestoes un índicecreadosobre dos o máscolumnas • Ejemplo: create index idx_authors_3 on authors(au_lname, au_fname) • Apropiadocuandolasconsultas se hacensobremúltiplescolumnas • Ejemplo: select * from authors where au_lname = "Ringer" and au_fname = "Anne"
Indice no-único • Un Indice No-únicoes un índicequepermitevaloresduplicados • Ejemplo: create index idx_authors_2 on authors(state) • Apropriadocuandolasconsultas se hacensobrevaloresduplicados • Ejemplo: select * from authors where state = "UT"
Indice único • Un índiceúnicoes un índiceque no permitevaloresduplicados • Ejemplo: create unique index idx_u_authors_1 on authors(au_id) • Apropiadocuandocada valor en la columnaindizadadebeserúnico • Ejemplo: select * from authors where au_id = "213-46-8915" • Puedesercreadosolamentesobrecolumnasque no tenganvaloresduplicados
Indice no-cluster • Un índice no-cluster es un índicequeutiliza un concepto de ordenamientodiferente a como se realizó el almacenamiento de la tabla • Ejemplo: create nonclustered index idx_authors_4 on authors(state) • Unatablapuedetenermuchosíndices no-cluster • Apropiadopara: • Tablasqueyatienen un índice cluster
PAGE 1001 PAGE 1305 PAGE 1007 Karsen Bennet Bennet 1876, 1 1421, 1 1421, 1 1132 1007 1311 Greane Karsen 1876, 1 1242, 4 1305 1133 Smith Hunter 1242, 1 1242, 1 1062 1127 PAGE 1133 PAGE 1127 PAGE 1132 PAGE 1421 PAGE 1242 PAGE 1241 PAGE 1409 Hunter Bennet Greane 1421, 1 1242, 4 1242, 1 10 21 18 14 Bennet Dull O’Leary Hunter Chan Jenkins Green 1129, 3 1421, 2 1241, 4 11 19 22 15 Ringer Greene Smith Green Greene Dull 1409, 1 1409, 2 White White Ringer Ringer 20 12 16 23 Edwards 1018, 5 17 13 Greane Jenkins Estructura de un índice no-cluster Index pages authors table (data pages) root level intermediate level leaf level key row ptr rowptr pgptr key rowptr pgptr key (more pages) create index idx_authors_2 on authors(au_lname) (more pages) (more pages)
Indice cluster • Un índice cluster es un índiceque, cuando se crea, indicacómoestánfísicamentealmacenados los datos en la tabla • Ejemplo: create clustered index idx_c_authors_1 on authors(au_id) • Unatablasólopuedecontener un índice cluster • Típicamentemejora el rendimientos de lasconsultasque se hacen a unatabla • Consultas con valor único (where state = ''CA'') • Consultasporrango de valores (where price > $10.00) • Puededismuir el rendimiento en operaciones de modificación de los datos de unatabla • Estareducción se debe a que se debenalmacenarfísicamente los datosordenados
PAGE 1421 PAGE 1241 PAGE 1242 PAGE 1409 14 18 10 21 Bennet Hunter Greane Karsen 11 22 15 19 Chan Green O'Leary Jenkins Dull Ringer Greene 16 23 20 12 17 13 Edwards Etructura de un índice cluster Index pages authors table (leaf/data pages) root level intermediate level key pg ptr PAGE 1007 Bennet 1241 key pg ptr Greane 1242 PAGE 1001 Hunter 1421 Bennet 1007 Karsen 1305 Smith 1062 PAGE 1305 Karsen 1409 (more pages) create clustered index idx_authors_2 on authors(au_lname) (more pages)
Escritura de consultasqueuseníndices • Los índice se usansolamentecuandounaconsultahacereferencia a columna(s) indizada(s) en la cláusulawhere • Si unatabla: • Tiene dos columnas, y • Cualquierapuedeidentificarunafiladesada, y • Unacolumnaestáindizadamientras la otra no, entonces • Se debeutilizar la columnaindizada en la cláusulawhere de la consulta
Ejemplo usando índices • crearunatabla: create table novels ( book_idint, title varchar(40), author varchar(40) ) • Insertartresfilas: 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")
crearunatabla: create table novels ( book_idint, title varchar(40), author varchar(40) ) • Insertartresfilas: 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") • Ejecutarlassentencias • create clustered index idx_c_novels_1 on • novels(book_id) • create unique index idx_u_novels_2 on • novels(author) • ¿Quésentenciafalla? ¿Porqué?________________________________________ • Borrar los objetoscreados: • drop index novels.idx_c_novels_1 • drop table novels