SlideShare una empresa de Scribd logo
1 de 87
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
1
12/03/2022
Índices
Unidad 6
Material docente compilado por el profesor Ph.D. Franklin Parrales Bravo para
uso de los cursos de Bases de Datos
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
2
12/03/2022
Objetivo general de la Unidad 6
Capacitar al estudiante para que decida donde y qué tipo de
índices deben ser creados para mejorar el rendimiento de las
consultas en la base de datos.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
3
12/03/2022
Diseño físico
▪ Especificación de estructuras de almacenamiento internas
(InnoDB vs MyISAM) y caminos de acceso específicos (índices)
para que las diversas aplicaciones que accedan a la BD tengan un
buen rendimiento
▪ Cada SGBD ofrece varias opciones:
▪ Diferentes tipos de ÍNDICES
▪ Agrupamiento de registros (de distinto tipo) relacionados en los mismos bloques
de disco (CLUSTER de ficheros)
▪ Distintos tipos de técnicas de dispersión (HASHING)
▪ Diferentes valores para los parámetros físicos (tamaño de bloque, de buffers,
...)
▪ ...
▪ El diseño físico es muy dependiente del SGBD comercial seleccionado
▪ Una vez elegido el SGBD, el Diseño Físico consiste en la elección e
implementación de las estructuras más apropiadas para los archivos de la
BD, entre las opciones que ofrece el SGBD
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
4
12/03/2022
Contenido
▪ ¿Qué es un índice?
▪ Primary Key
▪ Índice Clúster (Índice primario)
▪ Índice no clúster (Índice secundario)
▪ UNIQUE Key Index
▪ Composite Index
▪ Covering Index
▪ Partial Index
▪ Detrás de cámaras
▪ Reconstrucción de índices
▪ Directrices generales de indexación
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
5
12/03/2022
Heap Files
⚫ Filas son añadidas al final
del archivo a medida que se
insertan
⚫ Por lo tanto, el archivo está
desordenado.
⚫ Bueno para escanear
⚫ Las filas eliminadas crean
espacios en el archivo
⚫ El archivo debe compactarse
periódicamente para
recuperar espacio
5
Conjunto
de
registros
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
6
12/03/2022
Índices
▪ Un índice es una estructura de datos que proporciona acceso
eficiente a un conjunto de registros(tuplas)
▪ Las hojas del índice son punteros a registros. Los nodos
internos del índice definen su estructura de datos..
Conjunto
de
registros
Condición
sobre el
valor del
atributo
(a>2)
Registros
coincidentes
(a)
clave de
búsqueda
(search key)
índice
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
7
12/03/2022
ÍNDICES
• Son el mecanismo de acceso más dinámico: se pueden añadir, suprimir, redefinir
índices de forma más fácil que cambiar una secuencia de clúster, redefinir una
clave de dispersión o cambiar cualquier otro parámetro que afecte al
almacenamiento físico de la BD.
→ se puede posponer la especificación de índices para el final del proceso
de diseño e incluso después de la implementación inicial de la BD.
• Estructura común a muchos SGBD: B-trees → soporta bien diferentes tipos de
consultas (por rango, valores extremos MIN-MAX, ...), inserciones frecuentes,
...
• Pueden ser usados para:
✓ Evitar examinar la tabla completa (Full table scan) (se utiliza el índice
para realizar la examinación) → para ser útil: suma de E/S a índice +
E/S a tabla < E/S a tabla.
✓ Limitar el alcance del examen a tabla: cluster index, ordenación.
✓ Evitar una ordenación.
✓ Evitar el acceso a las tablas para determinadas consultas.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
8
12/03/2022
¿Qué es un índice?
▪ En terminología simple, un índice asigna claves de búsqueda a los
datos correspondientes en el disco mediante diferentes
estructuras de datos en memoria y en disco.
▪ El índice se utiliza para acelerar la búsqueda al reducir el número
de registros a buscar.
▪ En su mayoría, se crea un índice en las columnas especificadas
en la cláusula WHERE de una consulta a medida que la base de
datos recupera y filtra datos de las tablas en función de esas
columnas.
▪ Si no crea un índice, la base de datos escanea todas las filas, filtra las
filas coincidentes y devuelve el resultado.
▪ Con millones de registros, esta operación de escaneo puede demorar
muchos segundos y este alto tiempo de respuesta hace que las API y
las aplicaciones sean más lentas e inutilizables
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
9
12/03/2022
Ejemplo Simple en SQL
create index nc on
employees (hundreds2);
create table employees(
ssnum integer not null,
name varchar(20) not null,
lat real, long real,
hundreds1 real,
hundreds2 real
);
create index nc1 on
employees (hundreds2, ssnum, name)
select ssnum,name
from employees
where hundreds2 > 10;
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
10
12/03/2022
Veamos un ejemplo sobre MySQL…
▪ Usaremos MySQL con el motor de base de datos InnoDB,
aunque los conceptos explicados en esta unidad son más o
menos los mismos que se aplican en otros servidores de
bases de datos como Oracle, MSSQL, etc.
▪ Cree una tabla llamada index_demo con el siguiente
esquema:
CREATE TABLE index_demo (
name VARCHAR(20) NOT NULL,
age INT,
pan_no VARCHAR(20),
phone_no VARCHAR(20)
)ENGINE=INNODB;
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
11
12/03/2022
Veamos un ejemplo…
▪ ¿Cómo verificamos que estamos usando el motor InnoDB?
Ejecute el siguiente comando:
SHOW TABLE STATUS WHERE name = 'index_demo' G;
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
12
12/03/2022
Veamos un ejemplo…
▪ Ahora inserte algunos datos aleatorios en la tabla, mi tabla
con 5 filas se ve así:
▪ No he creado ningún índice hasta ahora en esta tabla.
Verifiquemos esto con el comando: SHOW INDEX.
Devuelve 0 resultados.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
13
12/03/2022
Veamos un ejemplo…
▪ En este momento, si ejecutamos una consulta SELECT simple, dado
que no hay un índice definido por el usuario, la consulta escaneará
toda la tabla para encontrar el resultado:
EXPLAIN SELECT * FROM index_demo WHERE name = 'alex';
▪ EXPLAIN muestra cómo el motor de consultas planea ejecutar la consulta.
▪ En la captura de pantalla anterior, puede ver que la columna de rows
devuelve 5 y possible_keys devuelve NULL.
▪ possible_keys representa todos los índices disponibles que se pueden usar
en esta consulta.
▪ La columna key representa qué índice se utilizará realmente de todos los
índices posibles en esta consulta.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
14
12/03/2022
Contenido
▪ ¿Qué es un índice?
▪ Primary Key
▪ Índice Clúster (Índice primario)
▪ Índice no clúster (Índice secundario)
▪ UNIQUE Key Index
▪ Composite Index
▪ Covering Index
▪ Partial Index
▪ Detrás de cámaras
▪ Reconstrucción de índices
▪ Directrices generales de indexación
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
15
12/03/2022
Claves de búsqueda
(Search Keys)
⚫ Una clave de búsqueda (search key) es una
secuencia de atributos/columnas.
create index i1 on accounts(branchnum, balance);
⚫ Tipos de Claves
⚫ Secuencial: el valor de la clave es monotónico con
el orden de inserción (por ejemplo, contador o
timestamp/marca de tiempo)
⚫ No secuencial: el valor de la clave no está
relacionado con la orden de inserción (por ejemplo,
número de seguro social)
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
16
12/03/2022
Primary Key
▪ La consulta anterior es muy ineficiente. Para optimizar dicha consulta
haremos de la columna phone_no una Primary Key asumiendo que no
pueden existir dos usuarios en nuestro sistema con el mismo número de
teléfono.
▪ Tenga en cuenta lo siguiente al crear una clave principal:
▪ Una Primary Key debe ser parte de muchas consultas vitales en su aplicación.
▪ La Primary Key es una restricción que identifica de forma única cada fila de una tabla.
Si varias columnas forman parte de la Primary Key, esa combinación debe ser única
para cada fila.
▪ La Primary Key debe ser no nula. Nunca haga de los campos nulos su Primary Key.
▪ Según los estándares ANSI SQL, las Primary Key deben ser comparables entre sí, y
definitivamente debería poder saber si el valor de la columna de la Primary Key para
una fila en particular es mayor, menor o igual que el mismo de otra fila.
▪ Dado que NULL significa un valor indefinido en los estándares SQL, no puede
comparar NULL de manera determinista con ningún otro valor, por lo que lógicamente
NULL no está permitido.
▪ El tipo de Primary Key ideal debería ser un número como INT o BIGINT porque las
comparaciones de enteros son más rápidas, por lo que atravesar el índice será muy
rápido.
A menudo, definimos un campo de identificación como AUTO INCREMENT en las tablas y lo usamos como Primary
Key, pero la elección de una clave principal depende de los desarrolladores.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
17
12/03/2022
¿Qué sucede si no crea ninguna Primary Key
usted mismo?
▪ No es obligatorio crear una Primary Key usted mismo. Si no ha
definido ninguna Primary Key, InnoDB implícitamente crea una
para usted porque, por diseño, InnoDB debe tener una Primary
Key en cada tabla. Entonces, una vez que crea una Primary Key
más adelante para esa tabla, InnoDB elimina la Primary Key
previamente definida automáticamente.
▪ Como no tenemos ninguna Primary Key definida a partir de ahora,
veamos qué creó InnoDB por defecto para nosotros:
SHOW EXTENDED INDEX FROM index_demo;
EXTENDED muestra todos los índices que no son utilizables por el usuario pero administrados
completamente por MySQL.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
18
12/03/2022
¿Qué sucede si no crea ninguna Primary Key
usted mismo?
▪ Aquí vemos que MySQL ha definido un índice compuesto
(hablaremos de los índices compuestos más adelante) en
DB_ROW_ID, DB_TRX_ID, DB_ROLL_PTR y todas las
columnas definidas en la tabla.
▪ En ausencia de una clave principal definida por el usuario,
este índice se utiliza para buscar registros de forma única.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
19
12/03/2022
¿Cuál es la diferencia entre key (clave)
e index (índice)?
▪ Aunque los términos key e index se usan indistintamente, key
significa una restricción impuesta sobre el comportamiento de la
columna. En este caso, la restricción es que la Primary Key es un
campo no nulo que identifica de forma única cada fila. Por otro
lado, el índice es una estructura de datos especial que facilita la
búsqueda de datos en la tabla.
▪ Ahora creemos el Primary Key en phone_no y examinemos el
índice creado:
▪ Tenga en cuenta que CREATE INDEX no se puede usar para
crear un Primary Key, pero se usa ALTER TABLE.
ALTER TABLE index_demo ADD PRIMARY KEY (phone_no);
SHOW INDEXES FROM index_demo;
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
20
12/03/2022
¿Cuál es la diferencia entre key (clave)
e index (índice)?
En la captura de pantalla anterior, vemos que se crea un índice principal en la
columna phone_no. Las columnas de las siguientes imágenes se describen de
la siguiente manera:
▪ Table: la tabla en la que se crea el índice.
▪ Non_unique: si el valor es 1, el índice no es único, si el valor es 0, el índice
es único.
▪ Key_name: El nombre del índice creado. El nombre del primary index
siempre es PRIMARY en MySQL, independientemente de si proporcionó
algún nombre de índice o no al crear el índice.
▪ Seq_in_index: el número de secuencia de la columna en el índice. Si
varias columnas forman parte del índice, el número de secuencia se
asignará en función de cómo se ordenaron las columnas durante el tiempo
de creación del índice. El número de secuencia comienza desde 1.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
21
12/03/2022
¿Cuál es la diferencia entre key (clave)
e index (índice)?
▪ Collation: cómo se ordena la columna en el índice. A significa ascendente, D
significa descendente, NULL significa no ordenado.
▪ Cardinality: el número estimado de valores únicos en el índice. Más cardinalidad
significa mayores posibilidades de que el optimizador de consultas elija el índice
para las consultas.
▪ Sub_part: el prefijo del índice. Es NULL si se indexa toda la columna. De lo
contrario, muestra el número de bytes indexados en caso de que la columna esté
parcialmente indexada. Definiremos el índice parcial más adelante.
▪ Packed: indica cómo se empaqueta la clave; NULL si no lo es.
▪ Null: SÍ si la columna puede contener valores NULOS y en blanco si no los
contiene.
▪ Index_type: indica qué estructura de datos de indexación se utiliza para este
índice. Algunos posibles candidatos son: BTREE, HASH, RTREE o FULLTEXT.
▪ Comment: La información sobre el índice no descrita en su propia columna.
▪ Index_comment: el comentario para el índice especificado cuando creó el índice
con el atributo COMMENT.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
22
12/03/2022
¿Cuál es la diferencia entre key (clave)
e index (índice)?
▪ Ahora veamos si este índice reduce el número de filas que se buscarán
para un phone_no determinado en la cláusula WHERE de una consulta.
▪ En esta captura, observe que la columna de rows solo ha devuelto 1, las
possible_keys & key devuelven PRIMARY.
▪ Entonces, esencialmente significa que al usar el índice principal llamado
PRIMARY (el nombre se asigna automáticamente cuando crea la Primary
Key), el optimizador de consultas simplemente va directamente al registro y
lo obtiene.
▪ Es muy eficiente. Esto es exactamente para lo que sirve un índice:
minimizar el alcance de la búsqueda a costa de espacio adicional.
EXPLAIN SELECT * FROM index_demo WHERE phone_no = '9281072002';
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
23
12/03/2022
Contenido
▪ ¿Qué es un índice?
▪ Primary Key
▪ Índice Clúster (Índice primario)
▪ Índice no clúster (Índice secundario)
▪ UNIQUE Key Index
▪ Composite Index
▪ Covering Index
▪ Partial Index
▪ Detrás de cámaras
▪ Reconstrucción de índices
▪ Directrices generales de indexación
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
24
12/03/2022
Índice Clúster (Índice primario)
▪ Un índice clúster se coloca con los
datos en el mismo espacio de
tablas o el mismo archivo de disco.
▪ Puede considerar que un índice
clúster sigue una representación
B-Tree cuyos nodos de hoja son los
bloques de datos reales en el disco,
ya que el índice y los datos residen
juntos.
▪ Este tipo de índice organiza
físicamente los datos en el disco
según el orden lógico de la clave de
índice.
Records
Un índice clúster en el atributo
X coloca registros cuyos valores
X están cerca uno del otro.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
25
12/03/2022
¿Qué significa la organización
física de los datos?
▪ Físicamente, los datos se organizan en el disco en miles o
millones de discos/bloques de datos.
▪ Para un índice clúster, no es obligatorio que todos los
bloques de disco se almacenen de forma
contigua(contagiously stored).
▪ Los bloques de datos físicos se mueven todo el tiempo aquí y
allá por el sistema operativo cuando es necesario.
▪ Un sistema de base de datos no tiene ningún control
absoluto sobre cómo se administra el espacio de datos
físicos, pero dentro de un bloque de datos, los registros se
pueden almacenar o administrar en el orden lógico del index
key.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
26
12/03/2022
¿Qué significa la organización
física de los datos?
El siguiente diagrama simplificado lo
explica:
▪ El rectángulo grande de color
amarillo representa un bloque de
disco/bloque de datos
▪ Los rectángulos de color azul
representan datos almacenados
como filas dentro de ese bloque
▪ El área de pie de página
representa el índice del bloque
donde residen pequeños
rectángulos de color rojo en el
orden ordenado de una clave en
particular. Estos pequeños
bloques no son más que una
especie de punteros que
apuntan a los offsets de los
registros.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
27
12/03/2022
¿Qué significa la organización física de
los datos?
▪ Los registros se almacenan en el bloque de disco en cualquier orden
arbitrario. Cada vez que se agregan nuevos registros, se agregan en el
siguiente espacio disponible. Cada vez que se actualiza un registro
existente, el sistema operativo decide si ese registro aún puede caber en la
misma posición o se debe asignar una nueva posición para ese registro.
▪ Por lo tanto, la posición de los registros es manejada completamente por el
sistema operativo y no existe una relación definida entre el orden de dos
registros. Para recuperar los registros en el orden lógico de la clave, las
páginas del disco contienen una sección de índice en el pie de página, el
índice contiene una lista de punteros de desplazamiento en el orden de la
clave. Cada vez que se modifica o crea un registro, se ajusta el índice.
▪ De esta manera, realmente no necesita preocuparse por organizar el registro
físico en un orden determinado, sino que se mantiene una pequeña sección
de índice en ese orden y obtener o mantener registros se vuelve muy fácil.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
28
12/03/2022
Ventaja del índice clúster:
▪ Esta ordenación o ubicación conjunta de datos relacionados
en realidad hace que un índice clúster sea más rápido.
▪ Cuando se obtienen datos del disco, el sistema lee el bloque
completo que contiene los datos, ya que nuestro sistema de
E/S del disco escribe y lee datos en bloques.
▪ Entonces, en el caso de consultas de rango, es muy posible
que los datos colocados se almacenen en la memoria.
▪ Digamos que requieres ejecutar la siguiente consulta:
SELECT * FROM index_demo WHERE phone_no > '9010000000’
AND phone_no < '9020000000'
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
29
12/03/2022
Ventaja del índice clúster:
▪ Un bloque de datos se recupera en la memoria cuando se ejecuta
la consulta. Digamos que el bloque de datos contiene phone_no
en el rango de 9010000000 a 9030000000. Entonces, cualquier
rango que haya solicitado en la consulta es solo un subconjunto
de los datos presentes en el bloque.
▪ Si ahora activa la siguiente consulta para obtener todos los
números de teléfono en el rango, digamos desde 9015000000
hasta 9019000000, no necesita obtener más bloques del disco.
▪ Los datos completos se pueden encontrar en el bloque de datos actual,
por lo que clustered_index reduce la cantidad de E/S de disco
colocando los datos relacionados tanto como sea posible en el mismo
bloque de datos. Esta reducida E/S de disco provoca una mejora en el
rendimiento.
▪ Entonces, si tiene una primary key bien elegida y sus consultas se
basan en la primary key, el rendimiento será súper rápido.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
30
12/03/2022
Relación entre Primary Key e
Índice Clúster:
▪ No puede crear un índice clúster manualmente usando
InnoDB en MySQL. MySQL lo elige por ti. Pero, ¿cómo
elige? Los siguientes extractos son de la documentación de
MySQL:
▪ Cuando define una PRIMARY KEY en su tabla, InnoDB la usa
como índice agrupado. Defina una clave principal para cada tabla
que cree. Si no hay una columna lógica única y no nula o un
conjunto de columnas, agregue una nueva columna auto-
increment, cuyos valores se completan automáticamente.
▪ Si no define una PRIMARY KEY para su tabla, MySQL ubica el
primer índice UNIQUE donde todas las columnas key (clave) son
NOT NULL e InnoDB lo usa como índice clúster.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
31
12/03/2022
Relación entre Primary Key e
Índice Clúster:
▪ Si la tabla no tiene PRIMARY KEY o un índice UNIQUE
adecuado, InnoDB genera internamente un índice clúster
oculto llamado GEN_CLUST_INDEX en una columna
sintética que contiene valores de ID de fila. Las filas están
ordenadas por el ID que InnoDB asigna a las filas en dicha
tabla. El ID de fila es un campo de 6 bytes que aumenta de
forma monótona a medida que se insertan nuevas filas. Por
lo tanto, las filas ordenadas por ID de fila están físicamente
en orden de inserción.
▪ En resumen, el motor MySQL InnoDB en realidad
administra el índice principal como un índice clúster
para mejorar el rendimiento, por lo que la primary key
y el registro real en el disco se agrupan juntos.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
32
12/03/2022
Estructura del Primary key (clustered)
Index:
▪ Un índice generalmente se mantiene como un árbol B+ en el
disco y en la memoria, y cualquier índice se almacena en
bloques en el disco. Estos bloques se denominan bloques de
índice.
▪ Las entradas en el bloque de índice siempre se ordenan en
la clave de índice/búsqueda. El bloque de índice de hoja del
índice contiene un localizador de filas. Para el índice
principal, el localizador de filas se refiere a la dirección virtual
de la ubicación física correspondiente de los bloques de
datos en el disco donde residen las filas que se ordenan
según la clave de índice.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
33
12/03/2022
Estructura del Primary key
(clustered) Index:
▪ En el siguiente diagrama, los
rectángulos del lado izquierdo
representan bloques de índice
de nivel de hoja y los
rectángulos del lado derecho
representan los bloques de
datos.
▪ Lógicamente, los bloques de
datos parecen estar alineados
en un orden ordenado, pero
como ya se describió
anteriormente, las ubicaciones
físicas reales pueden estar
dispersas aquí y allá.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
34
12/03/2022
Índice Clúster
Índex tiene una estructura para hacer mas rápida la búsqueda. Hace que el último
nivel sea ordenado físicamente, implica que todo registro que aparezca en esa página
va a estar ordenado. Así pues, SOLO SE PUEDE CREAR UN INDICE CLUSTER
POR TABLA.
Index page Data Page
Dado que un índice
clúster afecta la
organización física de
los datos, solo puede
haber un índice clúster
por tabla.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
35
12/03/2022
Índice Clúster
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
36
12/03/2022
Índice Clúster
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
37
12/03/2022
Índice Clúster
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
38
12/03/2022
¿Es posible crear un primary index
en una clave no primaria?
▪ En MySQL, un índice principal se crea
automáticamente y ya hemos descrito anteriormente
cómo MySQL elige el índice principal.
▪ Pero en el mundo de las bases de datos, en realidad
no es necesario crear un índice en la columna de
primary key; el índice principal también se puede crear
en cualquier columna que no es primary key.
▪ Pero cuando se crea en la primary key, todas las
entradas de clave son únicas en el índice, mientras que
en el otro caso, el índice principal también puede tener
una clave duplicada.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
39
12/03/2022
¿Es posible eliminar una primary key?
▪ Es posible eliminar una primary key. Cuando
elimina una primary key, el índice clúster
relacionado y la propiedad de unicidad de esa
columna se pierden.
ALTER TABLE `index_demo` DROP PRIMARY KEY;
- If the primary key does not exist, you get the following error:
"ERROR 1091 (42000): Can't DROP 'PRIMARY'; check that column/key exists"
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
40
12/03/2022
Ventajas y desventajas de un Primary Index
Ventajas
▪ Las consultas de rango basadas en el
Primary Index son muy eficientes.
Puede existir la posibilidad de que el
bloque de disco que la base de datos
ha leído del disco contenga todos los
datos que pertenecen a la consulta,
ya que el Primary Index está
agrupado(clusterizado) y los registros
están ordenados físicamente.
Entonces, la localidad de los datos
puede ser proporcionada por el
Primary Index.
▪ Cualquier consulta que aproveche la
Primary Key es muy rápida.
Desventajas
▪ Dado que el Primary Index contiene
una referencia directa a la dirección
del bloque de datos a través del
espacio de direcciones virtuales y los
bloques de disco están organizados
físicamente en el orden de la clave de
índice, cada vez que el sistema
operativo realiza alguna división de
página del disco debido a
operaciones DML como INSERTAR /
ACTUALIZAR / ELIMINAR, el índice
principal también debe actualizarse.
Por lo tanto, las operaciones DML
ejercen cierta presión sobre el
rendimiento del Primary Index.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
41
12/03/2022
Contenido
▪ ¿Qué es un índice?
▪ Primary Key
▪ Índice Clúster (Índice primario)
▪ Índice no clúster (Índice secundario)
▪ UNIQUE Key Index
▪ Composite Index
▪ Covering Index
▪ Partial Index
▪ Detrás de cámaras
▪ Reconstrucción de índices
▪ Directrices generales de indexación
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
42
12/03/2022
Índice NO Clúster(Índice secundario)
▪ Cualquier índice que no sea un índice
clúster se denomina índice secundario.
▪ Los índices secundarios no afectan las
ubicaciones de almacenamiento físico a
diferencia de los índices primarios.
▪ ¿Cuándo necesita un índice
secundario?
▪ Es posible que tenga varios casos de uso
en su aplicación en los que no consulta la
base de datos con una clave principal.
▪ En nuestro ejemplo, phone_no es la
clave principal, pero es posible que
necesitemos consultar la base de datos
con pan_no o name.
▪ En tales casos, necesita índices
secundarios en estas columnas si la
frecuencia de tales consultas es muy alta.
Records
⚫ Un índice no clúster no restringe
la organización de la tabla.
⚫ Puede haber varios índices no
clúster por tabla.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
43
12/03/2022
¿Cómo crear un índice
secundario en MySQL?
▪ El siguiente comando crea un índice secundario en
la columna de nombre en la tabla index_demo.
CREATE INDEX secondary_idx_1 ON index_demo (name);
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
44
12/03/2022
Estructura del índice secundario:
▪ En el siguiente diagrama, los rectángulos de color rojo
representan bloques de índice secundarios. El índice
secundario también se mantiene en el Árbol B+ y se ordena
según la clave en la que se creó el índice. Los nodos hoja
contienen una copia de la clave de los datos
correspondientes en el índice principal.
▪ Entonces, para entender, puede suponer que el índice
secundario tiene una referencia a la dirección de la clave
principal, aunque no es el caso. La recuperación de datos a
través del índice secundario significa que tiene que atravesar
dos árboles B+: uno es el árbol B+ del índice secundario y el
otro es el árbol B+ del índice primario.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
45
12/03/2022
Estructura del índice secundario:
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
46
12/03/2022
Índice No Clúster
▪ No ordena la pagina de datos, cada registro que
tiene en el ultimo nivel, cada registro que tiene se
ata a un puntero de tablas.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
47
12/03/2022
Índice No Clúster
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
48
12/03/2022
Ventajas y desventajas de un Secondary Index
Ventajas
▪ Lógicamente puedes crear
tantos índices secundarios
como quieras.
▪ Pero, en realidad, cuántos
índices realmente se requieren
requiere un proceso de
reflexión serio, ya que cada
índice tiene su propia
penalización.
Desventajas
▪ Con operaciones DML como DELETE / INSERT ,
el índice secundario también debe actualizarse
para que la copia de la columna de la clave
principal pueda eliminarse / insertarse. En tales
casos, la existencia de muchos índices
secundarios puede crear problemas.
▪ Además, si una clave principal es muy grande
como una URL, dado que los índices secundarios
contienen una copia del valor de la columna de la
clave principal, puede ser ineficiente en términos
de almacenamiento.
▪ Más claves secundarias significan una mayor
cantidad de copias duplicadas del valor de la
columna de la clave principal, por lo tanto, más
almacenamiento en el caso de una clave principal
grande. Además, la clave principal en sí misma
almacena las claves, por lo que el efecto
combinado en el almacenamiento será muy alto.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
49
12/03/2022
Consideración antes de eliminar
un Primary Index:
▪ En MySQL, puede eliminar un primary index eliminando la primary
key.
▪ Ya hemos visto que un índice secundario depende de un índice
primario.
▪ Entonces, si elimina un índice principal, todos los índices secundarios
deben actualizarse para contener una copia de la nueva clave de índice
principal que MySQL ajusta automáticamente.
▪ Este proceso es costoso cuando existen varios índices secundarios.
Además, otras tablas pueden tener una referencia de clave externa a la
clave principal, por lo que debe eliminar esas referencias de clave
externa antes de eliminar la clave principal.
▪ Cuando se elimina una primary key, MySQL crea
automáticamente otra primary key internamente, y esa es una
operación costosa.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
50
12/03/2022
Contenido
▪ ¿Qué es un índice?
▪ Primary Key
▪ Índice Clúster (Índice primario)
▪ Índice no clúster (Índice secundario)
▪ UNIQUE Key Index
▪ Composite Index
▪ Covering Index
▪ Partial Index
▪ Detrás de cámaras
▪ Reconstrucción de índices
▪ Directrices generales de indexación
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
51
12/03/2022
UNIQUE Key Index:
▪ Al igual que las primary keys, las unique keys también pueden
identificar registros de forma única con una diferencia: la columna
de unique keys (clave única) puede contener valores nulos.
▪ A diferencia de otros servidores de bases de datos, en MySQL
una columna de unique key puede tener tantos valores nulos
como sea posible. En el estándar SQL, nulo significa un valor
indefinido. Entonces, si MySQL tiene que contener solo un valor
nulo en una columna de unique keys, debe asumir que todos los
valores nulos son iguales.
▪ Pero, lógicamente, esto no es correcto, ya que nulo significa
indefinido, y los valores indefinidos no se pueden comparar entre
sí, es la naturaleza de nulo. Como MySQL no puede afirmar si
todos los valores nulos significan lo mismo, permite múltiples
valores nulos en la columna.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
52
12/03/2022
UNIQUE Key Index:
▪ El siguiente comando muestra cómo crear un índice
de clave única(unique key) en MySQL:
CREATE UNIQUE INDEX unique_idx_1 ON index_demo (pan_no);
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
53
12/03/2022
Contenido
▪ ¿Qué es un índice?
▪ Primary Key
▪ Índice Clúster (Índice primario)
▪ Índice no clúster (Índice secundario)
▪ UNIQUE Key Index
▪ Composite Index
▪ Covering Index
▪ Partial Index
▪ Detrás de cámaras
▪ Reconstrucción de índices
▪ Directrices generales de indexación
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
54
12/03/2022
Composite Index:
▪ MySQL le permite definir índices en múltiples columnas, hasta 16
columnas. Este índice se denomina índice
multicolumna/compuesto/compuesto.
▪ Digamos que tenemos un índice definido en 4 columnas: col1, col2, col3,
col4.
▪ Con un índice compuesto, tenemos capacidad de búsqueda en col1, (col1,
col2) , (col1, col2, col3) , (col1, col2, col3, col4).
▪ Entonces podemos usar cualquier prefijo del lado izquierdo de las
columnas indexadas, pero no podemos omitir una columna del medio y
usar eso como - (col1, col3) o (col1, col2, col4) o col3 o col4 etc. Estos son
combinaciones inválidas.
▪ Los siguientes comandos crean 2 índices compuestos en nuestra tabla:
CREATE INDEX composite_index_1 ON index_demo (phone_no, name, age);
CREATE INDEX composite_index_2 ON index_demo (pan_no, name, age);
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
55
12/03/2022
Composite Index:
▪ Si tiene consultas que contienen una cláusula WHERE en varias columnas,
escriba la cláusula en el orden de las columnas del índice compuesto. El
índice beneficiará esa consulta. De hecho, mientras decide las columnas
para un índice compuesto, puede analizar diferentes casos de uso de su
sistema e intentar determinar el orden de las columnas que beneficiará a la
mayoría de sus casos de uso.
▪ Los índices compuestos también pueden ayudarlo en las consultas JOIN &
SELECT. Ejemplo: en la siguiente consulta SELECT *, se utiliza
composite_index_2.
▪ Cuando se definen varios índices, el optimizador de consultas de MySQL
elige el índice que elimina la mayor cantidad de filas o escanea la menor
cantidad de filas posible para una mayor eficiencia.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
56
12/03/2022
¿Por qué usamos índices compuestos? ¿Por qué no
definir múltiples índices secundarios en las
columnas que nos interesan?
▪ MySQL usa solo un índice por tabla por consulta, excepto
para la UNION. (En la UNION, cada consulta lógica se
ejecuta por separado y los resultados se fusionan). Por lo
tanto, definir varios índices en varias columnas no garantiza
que esos índices se utilizarán incluso si son parte de la
consulta.
▪ MySQL mantiene algo llamado estadísticas de índice que
ayuda a MySQL a inferir cómo se ven los datos en el
sistema. Sin embargo, las estadísticas de índice son una
generalización, pero en función de estos metadatos, MySQL
decide qué índice es apropiado para la consulta actual.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
57
12/03/2022
¿Cómo funciona el índice compuesto?
▪ Las columnas utilizadas en los índices compuestos se
concatenan juntas y esas claves concatenadas se
almacenan ordenadas mediante un árbol B+. Cuando realiza
una búsqueda, la concatenación de sus claves de búsqueda
se compara con las del índice compuesto. Entonces, si hay
alguna discrepancia entre el orden de las claves de
búsqueda y el orden de las columnas del índice compuesto,
no se puede usar el índice.
▪ En nuestro ejemplo, para el
siguiente registro, se forma
una clave de índice compuesto
al concatenar pan_no, name,
age — HJKXS9086Wkousik28.
+--------+------+------------+------------+
name
age
pan_no
phone_no
+--------+------+------------+------------+
kousik
28
HJKXS9086W
9090909090
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
58
12/03/2022
¿Cómo identificar si necesita un
índice compuesto?:
▪ Analice sus consultas primero de acuerdo con sus casos de
uso. Si ve que ciertos campos aparecen juntos en muchas
consultas, puede considerar crear un índice compuesto.
▪ Si está creando un índice en col1 y un índice compuesto en
(col1, col2), entonces solo el índice compuesto debería estar
bien. col1 solo puede ser atendido por el índice compuesto
en sí mismo, ya que es un prefijo del lado izquierdo del
índice.
▪ Considere la cardinalidad. Si las columnas utilizadas en el
índice compuesto terminan teniendo una alta cardinalidad
juntas, son buenas candidatas para el índice compuesto.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
59
12/03/2022
Contenido
▪ ¿Qué es un índice?
▪ Primary Key
▪ Índice Clúster (Índice primario)
▪ Índice no clúster (Índice secundario)
▪ UNIQUE Key Index
▪ Composite Index
▪ Covering Index
▪ Partial Index
▪ Detrás de cámaras
▪ Reconstrucción de índices
▪ Directrices generales de indexación
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
60
12/03/2022
Covering Index:
▪ Un índice de cobertura(covering) es un tipo especial de índice
compuesto donde todas las columnas especificadas en la consulta
existen en alguna parte del índice. Por lo tanto, el optimizador de
consultas no necesita acceder a la base de datos para obtener los
datos, sino que obtiene el resultado del índice mismo.
▪ Ejemplo: ya hemos definido un índice compuesto en (pan_no,
name, age), así que ahora considere la siguiente consulta:
▪ Las columnas mencionadas en las cláusulas SELECT & WHERE
son parte del índice compuesto. Entonces, en este caso, podemos
obtener el valor de la columna de edad del propio índice
compuesto. Veamos qué muestra el comando EXPLAIN para esta
consulta:
SELECT age FROM index_demo WHERE pan_no = 'HJKXS9086W' AND name = 'kousik'
EXPLAIN FORMAT=JSON SELECT age FROM index_demo WHERE pan_no = 'HJKXS9086W’
AND name = '111kousik1';
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
61
12/03/2022
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
62
12/03/2022
Covering Index:
▪ En la respuesta anterior, tenga en cuenta que hay
una clave: using_index que se establece en
verdadero, lo que significa que el índice de
cobertura se ha utilizado para responder a la
consulta.
▪ No sé cuánto se aprecian los índices de cobertura
en entornos de producción, pero aparentemente
parece ser una buena optimización en caso de que
la consulta cumpla con los requisitos.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
63
12/03/2022
Contenido
▪ ¿Qué es un índice?
▪ Primary Key
▪ Índice Clúster (Índice primario)
▪ Índice no clúster (Índice secundario)
▪ UNIQUE Key Index
▪ Composite Index
▪ Covering Index
▪ Partial Index
▪ Detrás de cámaras
▪ Reconstrucción de índices
▪ Directrices generales de indexación
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
64
12/03/2022
Partial Index:
▪ Ya sabemos que los Índices agilizan nuestras
consultas a costa del espacio. Cuantos más índices
tenga, mayor será el requisito de almacenamiento.
▪ Ya hemos creado un índice llamado second_idx_1 en
el nombre de la columna. El nombre de la columna
puede contener valores grandes de cualquier longitud.
▪ También en el índice, los metadatos de los
localizadores de fila o punteros de fila tienen su propio
tamaño. Entonces, en general, un índice puede tener
una alta carga de almacenamiento y memoria.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
65
12/03/2022
Partial Index:
▪ En MySQL, también es posible crear un índice en los
primeros bytes de datos.
▪ Ejemplo: el siguiente comando crea un índice en los
primeros 4 bytes del nombre.
▪ Aunque este método reduce la sobrecarga de memoria en
cierta cantidad, el índice no puede eliminar muchas filas, ya
que en este ejemplo los primeros 4 bytes pueden ser
comunes a muchos nombres.
▪ Por lo general, este tipo de indexación de prefijos se admite
en las columnas de tipo CHAR, VARCHAR, BINARY,
VARBINARY.
CREATE INDEX secondary_index_1 ON index_demo (name(4));
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
66
12/03/2022
Contenido
▪ ¿Qué es un índice?
▪ Primary Key
▪ Índice Clúster (Índice primario)
▪ Índice no clúster (Índice secundario)
▪ UNIQUE Key Index
▪ Composite Index
▪ Covering Index
▪ Partial Index
▪ Detrás de cámaras
▪ Reconstrucción de índices
▪ Directrices generales de indexación
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
67
12/03/2022
¿Qué sucede detrás de cámaras
cuando definimos un índice?
▪ Ejecutemos de nuevo el comando SHOW
EXTENDED
SHOW EXTENDED INDEXES FROM index_demo;
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
68
12/03/2022
¿Qué sucede detrás de cámaras
cuando definimos un índice?
▪ Definimos el secondary_index_1 en nombre, pero
MySQL ha creado un índice compuesto en (nombre,
número_teléfono) donde número_teléfono es la
columna de primary key.
▪ Creamos secondary_index_2 en age y MySQL creó un
índice compuesto en (age, phone_no).
▪ Creamos composite_index_2 en (pan_no, name, age) y
MySQL ha creado un índice compuesto en (pan_no,
name, age, phone_no).
▪ El índice compuesto composite_index_1 ya tiene
phone_no como parte de él.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
69
12/03/2022
¿Qué sucede detrás de cámaras
cuando definimos un índice?
▪ Entonces, sea cual sea el índice que creemos, MySQL en segundo
plano crea un índice compuesto de respaldo que, a su vez, apunta a
la primary key.
▪ Esto significa que la primary key es un ciudadano de primera clase
en el mundo de la indexación de MySQL. También prueba que todos
los índices están respaldados por una copia del primary index, pero
no estoy seguro de si se comparte una sola copia del primary index
o si se usan diferentes copias para diferentes índices.
▪ Hay muchos otros índices, como el Spatial index y el Full Text
Search index que ofrece MySQL. Todavía no he experimentado con
esos índices, por lo que no los discutiré en esta clase.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
70
12/03/2022
Contenido
▪ ¿Qué es un índice?
▪ Primary Key
▪ Índice Clúster (Índice primario)
▪ Índice no clúster (Índice secundario)
▪ UNIQUE Key Index
▪ Composite Index
▪ Covering Index
▪ Partial Index
▪ Detrás de cámaras
▪ Reconstrucción de índices
▪ Directrices generales de indexación
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
71
12/03/2022
¿Por qué volver a generar y
reorganizar índices?
▪ Después de que los índices son creados, se
someterán a un mantenimiento automático de parte
del RDBMS cuando sea que se ejecutan
operaciones insert, update o delete en los datos
subyacentes.
▪ Incluso así, estas modificaciones automáticas
continuamente dispersarán la información en el
índice a través de la base de datos – fragmentando
el índice en el tiempo.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
72
12/03/2022
¿Por qué volver a generar y
reorganizar índices?
▪ El resultado – los índices ahora tienen páginas donde
el orden lógico (basado en el valor de clave) difiere del
orden físico dentro del archivo de datos.
▪ Esto significa que hay un alto porcentaje de espacio libre en
las páginas de índice, y que el RDBMS tiene que leer un
número superior de páginas cuando se escanea cada
índice.
▪ También, el orden de las páginas que pertenecen al mismo
índice se mezcla y esto añade más trabajo al RDBMS
cuando está leyendo un índice – especialmente en términos
de E/S.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
73
12/03/2022
¿Por qué volver a generar y
reorganizar índices?
▪ El impacto de la fragmentación del Índice en algún RDBMS
puede variar de una eficiencia mermada de las consultas
para servidores de impacto bajo en el desempeño, al punto
donde el RDBMS para completamente de usar los índices y
recurre a una última solución – escaneos completos de
tablas para cada consulta.
▪ Como se mencionó al inicio de esta unidad, los escaneos
completos de tablas impactarán drásticamente en el
desempeño de la consulta y esta es la alarma final para
remediar la fragmentación de índice en cualquier RDBMS.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
74
12/03/2022
Ejemplo
Id_Persona int (Pk)
Nombre 100
Apellido 100
Dirección 200
Persona
1024
208 bytes/row
4 row/pag
Idx1(nombre,apellido)
Idx2(apellido,nombre)
100 bytes/row => 10 row/pag
Sumatoria de los índices<= tamaño de paginas/3
Cada cierto tiempo, se debe hacer una
reconstrucción de la base de datos para que
no haya un desperdicio, eso se llama Revire
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
75
12/03/2022
Reconstrucción
200000 registros
200000 registros pero
Sin desperdicios(especial
mente en la capa de datos)
2000 registros
200 registros
Si es mas compacta, entonces
existirán menos I/O
1.- se borran todos los índices
2.- se baja la tabla a un archivo
3.- se borra la tabla, el contenido
4.- se sube la tabla en forma ordenada para que el índice
clúster se suba sin desperdicio
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
76
12/03/2022
Reconstrucción en MySQL
1. Usa telnet, ssh o máquina local para conectar con el servidor
MySQL y accede a la herramienta de línea de comandos de
MySQL. Puedes hacer esto con mysql -p.
2. Usa el comando "CHECK TABLE nombreTabla FOR UPGRADE"
para verificar que la tabla necesita ser reparada.
3. Sal de la herramienta de línea de comandos de MySQL
escribiendo "x" y pulsando la tecla "Intro". Volverás a la línea de
comandos de consola.
4. Elimina la tabla con el comando "mysqldump": mysqldump
nombreBaseDatos nombreTabla > dump.sql.
5. Vuelve a crear la tabla en la base de datos con el comando de
MySQL: mysql nombreBaseDatos< dump.sql. Esto reconstruirá
la tabla y los índices de la tabla.
https://techlandia.com/reconstruir-indices-mysql-como_42839/
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
77
12/03/2022
Contenido
▪ ¿Qué es un índice?
▪ Primary Key
▪ Índice Clúster (Índice primario)
▪ Índice no clúster (Índice secundario)
▪ UNIQUE Key Index
▪ Composite Index
▪ Covering Index
▪ Partial Index
▪ Detrás de cámaras
▪ Reconstrucción de índices
▪ Directrices generales de indexación
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
78
12/03/2022
Resumen: Índice Clúster / No clúster
⚫ Índice Clúster (Índice
primario)
⚫ Un índice clúster en el atributo
X coloca registros cuyos
valores X están cerca uno del
otro.
⚫ Índice NO Clúster(Índice
secundario)
⚫ Un índice no clúster no restringe
la organización de la tabla.
⚫ Puede haber varios índices no
clúster por tabla.
Records Records
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
79
12/03/2022
Resumen: Restricciones(Constraints) e Índices
⚫ Primary Key, Unique
⚫ Un índice no clúster se construye sobre los atributos que
componen la Primary Key con la restricción de que los
valores son únicos.
⚫ Foreign Key
⚫ De forma predeterminada, no se crea ningún índice para
aplicar una restricción de clave externa.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
80
12/03/2022
Tablas organizadas por índices
▪ Los índices clúster organizan cómo serán almacenados
los datos en el disco
▪ El índice clúster y el almacenamiento pueden ser
ortogonales
▪ Se puede eliminar un índice clúster, en cuyo caso la tabla se
organiza como un archivo de almacenamiento dinámico
▪ Se puede definir un índice clúster en una tabla (anteriormente
organizada como una heap table/tabla montón), que luego se
reorganiza
▪ Tabla organizada por índices
▪ El índice clúster define la organización de la tabla. Es necesario
cuando se define la tabla. No puede ser eliminado (dropped).
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
81
12/03/2022
Dense / Sparse Index
⚫ Sparse index
⚫ Los punteros están asociados a
las páginas
⚫ Dense index
⚫ Los punteros están asociados a
los registros.
⚫ Los índices no clúster son densos
P1 Pi
P2 record
record
record
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
82
12/03/2022
Conviene UTILIZAR índices...
• sobre tablas medianas/grandes (ocupan gran cantidad de espacio)
• para facilitar el acceso a pequeños porcentajes del total de tuplas (≤20%)
seleccionadas
• y para evitar...
– el recorrido de la tabla completa
– el acceso a tablas para consultas que incluyen un pequeño subconjunto de columnas
(gracias a los índices compuestos)
PERSONA(ssnum, apellido, nombre, edad, telef)
CREATE INDEX idx_perso ON PERSONA(apellido, nombre)
– la ordenación de las tuplas de la tabla (ORDER BY, GROUP BY, UNION,
DISTINCT, JOIN, ...)
– el acceso a ficheros para determinadas consultas (EXISTS, IN, ...)
• Crearlos sobre columnas ...
– que suelen aparecer en cláusulas WHERE, order by, ... (ordenación)
– que suelen ser atributos de reunión de varias tablas (p.ej. claves ajenas)
– con gran variedad de valores (mayor discriminación en las búsquedas)
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
83
12/03/2022
Conviene EVITAR los índices...
• si la tabla es muy pequeña (ocupa poco espacio)
• si se degradan los requerimientos de procesamiento crítico
• si el costo de su almacenamiento +mantenimiento >>>> beneficio
– INSERCIÓN, MODIFICACIÓN, ELIMINACIÓN sobre tablas indexadas
 mantenimiento del índice (automático, por parte del SGBD)
– A veces conviene CREAR la tabla, rellenarla, y luego CREAR los ÍNDICES
– Y a veces conviene (actualizaciones masivas, reorganizaciones, copias de
seguridad, estadísticas): ELIMINAR ÍNDICES, realizar las MODIFICACIONES
sobre la BD y CREAR de nuevo los ÍNDICES
• Máximo de  4 índices por tabla. Más si rara vez es actualizada
–  INDICES   necesidad de espacio +  velocidad de inserción/eliminación
• Evitar crear índices sobre columnas
– que son actualizadas muy a menudo
– con distribución irregular de valores (selectividad: confunde al optimizador)
– columnas que sólo aparezcan en cláusulas WHERE con funciones u operadores
(distintos a MIN o MAX) → pueden no hacer disponible el camino de acceso
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
84
12/03/2022
Directrices generales de indexación
▪ Dado que los índices consumen memoria adicional, decida con
cuidado cuántos y qué tipo de índice serán suficientes para sus
necesidades.
▪ Con las operaciones DML, los índices se actualizan, por lo que las
operaciones de escritura son bastante costosas con los índices.
▪ Cuantos más índices tengas, mayor será el costo. Los índices se
utilizan para acelerar las operaciones de lectura.
▪ Entonces, si tiene un sistema que escribe mucho pero no lee mucho,
piense bien si necesita un índice o no.
▪ La cardinalidad es importante (cardinalidad significa el número de
valores distintos en una columna). Si crea un índice en una
columna que tiene baja cardinalidad, eso no será beneficioso ya
que el índice debería reducir el espacio de búsqueda. La baja
cardinalidad no reduce significativamente el espacio de búsqueda.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
85
12/03/2022
Directrices generales de indexación
▪ Ejemplo:
▪ Si crea un índice en una columna de tipo booleano (INT 1 o 0
solamente), el índice estará muy sesgado ya que la cardinalidad
es menor (la cardinalidad es 2 aquí).
▪ Pero si este campo booleano se puede combinar con otras
columnas para producir una alta cardinalidad, establezca ese
índice cuando sea necesario.
▪ Los índices también pueden necesitar algo de mantenimiento
si aún quedan datos antiguos en el índice.
▪ Deben eliminarse, de lo contrario, colapsará (hogged) la
memoria, así que trate de tener un plan de monitoreo para sus
índices.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
86
12/03/2022
Directrices generales de indexación
▪ Para finalizar, es extremadamente importante
comprender los diferentes aspectos de la
indexación de bases de datos.
▪ Eso te ayudará al diseñar sistemas desde su nivel más
bajo.
▪ En la vida real, muchas optimizaciones de nuestras
aplicaciones dependen del conocimiento de
detalles tan complejos.
▪ Un índice cuidadosamente elegido seguramente le
ayudará a aumentar el rendimiento de su aplicación.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
87
12/03/2022
Índices
Unidad 6
Final de la unidad
Y del curso…. !Muchas gracias
a todos!

Más contenido relacionado

La actualidad más candente

Dependencias Funcionales en Bases de Datos
Dependencias Funcionales en Bases de DatosDependencias Funcionales en Bases de Datos
Dependencias Funcionales en Bases de DatosEsteban Andres Diaz Mina
 
Analisis estructurado
Analisis estructuradoAnalisis estructurado
Analisis estructuradokvillazon
 
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONESPRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONESFranklin Parrales Bravo
 
Forma normal de boyce codd y algoritmos de descomposición
Forma normal de boyce codd y algoritmos de descomposiciónForma normal de boyce codd y algoritmos de descomposición
Forma normal de boyce codd y algoritmos de descomposiciónJuan Anaya
 
ED Unidad 4: Estructuras de datos no lineales (árboles)
ED Unidad 4: Estructuras de datos no lineales (árboles)ED Unidad 4: Estructuras de datos no lineales (árboles)
ED Unidad 4: Estructuras de datos no lineales (árboles)Franklin Parrales Bravo
 
DB1 Unidad 1: Sistemas de almacenamiento de la información
DB1 Unidad 1: Sistemas de almacenamiento de la informaciónDB1 Unidad 1: Sistemas de almacenamiento de la información
DB1 Unidad 1: Sistemas de almacenamiento de la informaciónFranklin Parrales Bravo
 
Clases y objetos de java
Clases y objetos de javaClases y objetos de java
Clases y objetos de javainnovalabcun
 
Estructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colasEstructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colasHuascar Génere
 
Unidad 3 Modelamiento De Datos Conceptual
Unidad 3 Modelamiento De Datos ConceptualUnidad 3 Modelamiento De Datos Conceptual
Unidad 3 Modelamiento De Datos ConceptualSergio Sanchez
 
Diagrama componentes
Diagrama componentesDiagrama componentes
Diagrama componentesmarianela0393
 
ED Unidad 3: Estructuras de datos lineales (listas)
ED Unidad 3: Estructuras de datos lineales (listas) ED Unidad 3: Estructuras de datos lineales (listas)
ED Unidad 3: Estructuras de datos lineales (listas) Franklin Parrales Bravo
 

La actualidad más candente (20)

Dependencias Funcionales en Bases de Datos
Dependencias Funcionales en Bases de DatosDependencias Funcionales en Bases de Datos
Dependencias Funcionales en Bases de Datos
 
Analisis estructurado
Analisis estructuradoAnalisis estructurado
Analisis estructurado
 
Modelo de datos
Modelo de datosModelo de datos
Modelo de datos
 
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONESPRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
PRINCIPIOS BÁSICOS DE CONSTRUCCIÓN DE SOFTWARE Y TRATAMIENTO DE EXCEPCIONES
 
Forma normal de boyce codd y algoritmos de descomposición
Forma normal de boyce codd y algoritmos de descomposiciónForma normal de boyce codd y algoritmos de descomposición
Forma normal de boyce codd y algoritmos de descomposición
 
ED Unidad 4: Estructuras de datos no lineales (árboles)
ED Unidad 4: Estructuras de datos no lineales (árboles)ED Unidad 4: Estructuras de datos no lineales (árboles)
ED Unidad 4: Estructuras de datos no lineales (árboles)
 
DB1 Unidad 1: Sistemas de almacenamiento de la información
DB1 Unidad 1: Sistemas de almacenamiento de la informaciónDB1 Unidad 1: Sistemas de almacenamiento de la información
DB1 Unidad 1: Sistemas de almacenamiento de la información
 
Programación 3: listas enlazadas
Programación 3: listas enlazadasProgramación 3: listas enlazadas
Programación 3: listas enlazadas
 
DB1 Unidad 7: Desnormalizacion
DB1 Unidad 7: DesnormalizacionDB1 Unidad 7: Desnormalizacion
DB1 Unidad 7: Desnormalizacion
 
Formato ieee830
Formato ieee830Formato ieee830
Formato ieee830
 
Clases y objetos de java
Clases y objetos de javaClases y objetos de java
Clases y objetos de java
 
Estructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colasEstructura de datos: lista, pilas y colas
Estructura de datos: lista, pilas y colas
 
Listas enlazadas
Listas enlazadasListas enlazadas
Listas enlazadas
 
Procedimientos almacenados
Procedimientos almacenadosProcedimientos almacenados
Procedimientos almacenados
 
Unidad 3 Modelamiento De Datos Conceptual
Unidad 3 Modelamiento De Datos ConceptualUnidad 3 Modelamiento De Datos Conceptual
Unidad 3 Modelamiento De Datos Conceptual
 
Diagrama componentes
Diagrama componentesDiagrama componentes
Diagrama componentes
 
Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j
Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4jBases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j
Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j
 
Conceptos Fundamentales de Base de Datos
Conceptos Fundamentales de Base de DatosConceptos Fundamentales de Base de Datos
Conceptos Fundamentales de Base de Datos
 
ED Unidad 3: Estructuras de datos lineales (listas)
ED Unidad 3: Estructuras de datos lineales (listas) ED Unidad 3: Estructuras de datos lineales (listas)
ED Unidad 3: Estructuras de datos lineales (listas)
 
Estructura datos pilas y colas
Estructura datos pilas y colasEstructura datos pilas y colas
Estructura datos pilas y colas
 

Similar a DB1 Unidad 6: Indices

DB1 Unidad 3: Diseño físico relacional
DB1 Unidad 3: Diseño físico relacionalDB1 Unidad 3: Diseño físico relacional
DB1 Unidad 3: Diseño físico relacionalFranklin Parrales Bravo
 
Libro de recetas.pptx
Libro de recetas.pptxLibro de recetas.pptx
Libro de recetas.pptxEugenio764166
 
Cuestionario de informática ivan hidalgo
Cuestionario de informática ivan hidalgoCuestionario de informática ivan hidalgo
Cuestionario de informática ivan hidalgoivanhidalgo777
 
Mejores practicas sql
Mejores practicas sqlMejores practicas sql
Mejores practicas sqlnnakasone
 
Diseño de bases de datos
Diseño de bases de datosDiseño de bases de datos
Diseño de bases de datosrulo182
 
Consideraciones de diseño
Consideraciones de diseñoConsideraciones de diseño
Consideraciones de diseñoYoung Hyun
 
Cuál es la estructura de una bd
Cuál es la estructura de una bdCuál es la estructura de una bd
Cuál es la estructura de una bd3206661170
 
Cuál es la estructura de una bd
Cuál es la estructura de una bdCuál es la estructura de una bd
Cuál es la estructura de una bd3206661170
 
Cuál es la estructura de una bd
Cuál es la estructura de una bdCuál es la estructura de una bd
Cuál es la estructura de una bd3206661170
 
Cuál es la estructura de una bd
Cuál es la estructura de una bdCuál es la estructura de una bd
Cuál es la estructura de una bd3206661170
 
SQL Saturday 254 10- Cosas que no se deben de hacer en una BD
SQL Saturday 254   10- Cosas que no se deben de hacer en una BDSQL Saturday 254   10- Cosas que no se deben de hacer en una BD
SQL Saturday 254 10- Cosas que no se deben de hacer en una BDAdrian Miranda
 
Diseño de una base de datos
Diseño de una base de datosDiseño de una base de datos
Diseño de una base de datosDorvinEduardo
 
Creación de base de datos
Creación de base de datosCreación de base de datos
Creación de base de datosUTN
 
Angelica maria jaimes moreno
Angelica maria jaimes morenoAngelica maria jaimes moreno
Angelica maria jaimes morenoangelicam9
 
OVA DISEÑO ORACLE Introducción Bases de Datos .pptx
OVA DISEÑO ORACLE Introducción Bases de Datos .pptxOVA DISEÑO ORACLE Introducción Bases de Datos .pptx
OVA DISEÑO ORACLE Introducción Bases de Datos .pptxMARGOTHLORENAMARTINE
 

Similar a DB1 Unidad 6: Indices (20)

DB1 Unidad 3: Diseño físico relacional
DB1 Unidad 3: Diseño físico relacionalDB1 Unidad 3: Diseño físico relacional
DB1 Unidad 3: Diseño físico relacional
 
Diseño fisico
Diseño fisicoDiseño fisico
Diseño fisico
 
Libro de recetas.pptx
Libro de recetas.pptxLibro de recetas.pptx
Libro de recetas.pptx
 
Cuestionario de informática ivan hidalgo
Cuestionario de informática ivan hidalgoCuestionario de informática ivan hidalgo
Cuestionario de informática ivan hidalgo
 
Mejores practicas sql
Mejores practicas sqlMejores practicas sql
Mejores practicas sql
 
Diseño de bases de datos
Diseño de bases de datosDiseño de bases de datos
Diseño de bases de datos
 
BASE DE DATOS
BASE DE DATOSBASE DE DATOS
BASE DE DATOS
 
Consideraciones de diseño
Consideraciones de diseñoConsideraciones de diseño
Consideraciones de diseño
 
Cuál es la estructura de una bd
Cuál es la estructura de una bdCuál es la estructura de una bd
Cuál es la estructura de una bd
 
Cuál es la estructura de una bd
Cuál es la estructura de una bdCuál es la estructura de una bd
Cuál es la estructura de una bd
 
Cuál es la estructura de una bd
Cuál es la estructura de una bdCuál es la estructura de una bd
Cuál es la estructura de una bd
 
Cuál es la estructura de una bd
Cuál es la estructura de una bdCuál es la estructura de una bd
Cuál es la estructura de una bd
 
Trabajo consulta
Trabajo consultaTrabajo consulta
Trabajo consulta
 
SQL Saturday 254 10- Cosas que no se deben de hacer en una BD
SQL Saturday 254   10- Cosas que no se deben de hacer en una BDSQL Saturday 254   10- Cosas que no se deben de hacer en una BD
SQL Saturday 254 10- Cosas que no se deben de hacer en una BD
 
Diseño de una base de datos
Diseño de una base de datosDiseño de una base de datos
Diseño de una base de datos
 
base de datos
base de datosbase de datos
base de datos
 
Base de datos1024
Base de datos1024Base de datos1024
Base de datos1024
 
Creación de base de datos
Creación de base de datosCreación de base de datos
Creación de base de datos
 
Angelica maria jaimes moreno
Angelica maria jaimes morenoAngelica maria jaimes moreno
Angelica maria jaimes moreno
 
OVA DISEÑO ORACLE Introducción Bases de Datos .pptx
OVA DISEÑO ORACLE Introducción Bases de Datos .pptxOVA DISEÑO ORACLE Introducción Bases de Datos .pptx
OVA DISEÑO ORACLE Introducción Bases de Datos .pptx
 

Más de Franklin Parrales Bravo

Presentacion del congreso ETCM del 2021 en Cuenca
Presentacion del congreso ETCM del 2021 en CuencaPresentacion del congreso ETCM del 2021 en Cuenca
Presentacion del congreso ETCM del 2021 en CuencaFranklin Parrales Bravo
 
IW Unidad 1: Introducción a la Ingeniería Web
IW Unidad 1: Introducción a la Ingeniería WebIW Unidad 1: Introducción a la Ingeniería Web
IW Unidad 1: Introducción a la Ingeniería WebFranklin Parrales Bravo
 
IW Unidad 4: Web accesible, semántica y ubicua
IW Unidad 4: Web accesible, semántica y ubicuaIW Unidad 4: Web accesible, semántica y ubicua
IW Unidad 4: Web accesible, semántica y ubicuaFranklin Parrales Bravo
 
IW Unidad 3: Ingeniería Web dirigida por modelos
IW Unidad 3: Ingeniería Web dirigida por modelosIW Unidad 3: Ingeniería Web dirigida por modelos
IW Unidad 3: Ingeniería Web dirigida por modelosFranklin Parrales Bravo
 
IW Unidad 2: Metodologías y Técnicas de la Ingeniería Web
IW Unidad 2: Metodologías y Técnicas de la Ingeniería WebIW Unidad 2: Metodologías y Técnicas de la Ingeniería Web
IW Unidad 2: Metodologías y Técnicas de la Ingeniería WebFranklin Parrales Bravo
 
AD Unidad4: Programación paralela y distribuida
AD Unidad4: Programación paralela y distribuidaAD Unidad4: Programación paralela y distribuida
AD Unidad4: Programación paralela y distribuidaFranklin Parrales Bravo
 
AD Unidad3: Tecnologías de aplicaciones distribuidas
AD Unidad3: Tecnologías de aplicaciones distribuidasAD Unidad3: Tecnologías de aplicaciones distribuidas
AD Unidad3: Tecnologías de aplicaciones distribuidasFranklin Parrales Bravo
 
EP Unidad03: Planificación financiera y análisis de riesgos
EP Unidad03: Planificación financiera y análisis de riesgosEP Unidad03: Planificación financiera y análisis de riesgos
EP Unidad03: Planificación financiera y análisis de riesgosFranklin Parrales Bravo
 
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidosAD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidosFranklin Parrales Bravo
 
AD Unidad1: Fundamentos de sistemas paralelos y distribuidos
AD Unidad1: Fundamentos de sistemas paralelos y distribuidosAD Unidad1: Fundamentos de sistemas paralelos y distribuidos
AD Unidad1: Fundamentos de sistemas paralelos y distribuidosFranklin Parrales Bravo
 
EP Unidad01: Principios básicos de la metodología de proyectos
EP Unidad01: Principios básicos de la metodología de proyectosEP Unidad01: Principios básicos de la metodología de proyectos
EP Unidad01: Principios básicos de la metodología de proyectosFranklin Parrales Bravo
 
EP Unidad02: Conceptos para el alcance, tiempo y muestra
EP Unidad02: Conceptos para el alcance, tiempo y muestraEP Unidad02: Conceptos para el alcance, tiempo y muestra
EP Unidad02: Conceptos para el alcance, tiempo y muestraFranklin Parrales Bravo
 
GCSW Unidad1: Objetos de la Gestión de Configuración del Software
GCSW Unidad1: Objetos de la Gestión de Configuración del SoftwareGCSW Unidad1: Objetos de la Gestión de Configuración del Software
GCSW Unidad1: Objetos de la Gestión de Configuración del SoftwareFranklin Parrales Bravo
 
GCSW Unidad2: Actividades de la gestión de configuración del software
GCSW Unidad2: Actividades de la gestión de configuración del software GCSW Unidad2: Actividades de la gestión de configuración del software
GCSW Unidad2: Actividades de la gestión de configuración del software Franklin Parrales Bravo
 
POO Unidad 4: Persistencia de objetos y manejo de archivos
POO Unidad 4: Persistencia de objetos y manejo de archivosPOO Unidad 4: Persistencia de objetos y manejo de archivos
POO Unidad 4: Persistencia de objetos y manejo de archivosFranklin Parrales Bravo
 
POO Unidad 3: Interfaz gráfica de usuario e hilos
POO Unidad 3: Interfaz gráfica de usuario e hilosPOO Unidad 3: Interfaz gráfica de usuario e hilos
POO Unidad 3: Interfaz gráfica de usuario e hilosFranklin Parrales Bravo
 
POO Unidad 2: Programación Orientada a Objetos
POO Unidad 2: Programación Orientada a ObjetosPOO Unidad 2: Programación Orientada a Objetos
POO Unidad 2: Programación Orientada a ObjetosFranklin Parrales Bravo
 
POO Unidad 1: Introducción a la Programación Orientada a Objetos
POO Unidad 1: Introducción a la Programación Orientada a ObjetosPOO Unidad 1: Introducción a la Programación Orientada a Objetos
POO Unidad 1: Introducción a la Programación Orientada a ObjetosFranklin Parrales Bravo
 
RD Unidad 3: IPv6, Routers y Enrutamiento
RD Unidad 3: IPv6, Routers y EnrutamientoRD Unidad 3: IPv6, Routers y Enrutamiento
RD Unidad 3: IPv6, Routers y EnrutamientoFranklin Parrales Bravo
 

Más de Franklin Parrales Bravo (20)

Presentacion del congreso ETCM del 2021 en Cuenca
Presentacion del congreso ETCM del 2021 en CuencaPresentacion del congreso ETCM del 2021 en Cuenca
Presentacion del congreso ETCM del 2021 en Cuenca
 
IW Unidad 1: Introducción a la Ingeniería Web
IW Unidad 1: Introducción a la Ingeniería WebIW Unidad 1: Introducción a la Ingeniería Web
IW Unidad 1: Introducción a la Ingeniería Web
 
IW Unidad 4: Web accesible, semántica y ubicua
IW Unidad 4: Web accesible, semántica y ubicuaIW Unidad 4: Web accesible, semántica y ubicua
IW Unidad 4: Web accesible, semántica y ubicua
 
IW Unidad 3: Ingeniería Web dirigida por modelos
IW Unidad 3: Ingeniería Web dirigida por modelosIW Unidad 3: Ingeniería Web dirigida por modelos
IW Unidad 3: Ingeniería Web dirigida por modelos
 
MOD Unidad 2: Tipos de modelado
MOD Unidad 2: Tipos de modeladoMOD Unidad 2: Tipos de modelado
MOD Unidad 2: Tipos de modelado
 
IW Unidad 2: Metodologías y Técnicas de la Ingeniería Web
IW Unidad 2: Metodologías y Técnicas de la Ingeniería WebIW Unidad 2: Metodologías y Técnicas de la Ingeniería Web
IW Unidad 2: Metodologías y Técnicas de la Ingeniería Web
 
AD Unidad4: Programación paralela y distribuida
AD Unidad4: Programación paralela y distribuidaAD Unidad4: Programación paralela y distribuida
AD Unidad4: Programación paralela y distribuida
 
AD Unidad3: Tecnologías de aplicaciones distribuidas
AD Unidad3: Tecnologías de aplicaciones distribuidasAD Unidad3: Tecnologías de aplicaciones distribuidas
AD Unidad3: Tecnologías de aplicaciones distribuidas
 
EP Unidad03: Planificación financiera y análisis de riesgos
EP Unidad03: Planificación financiera y análisis de riesgosEP Unidad03: Planificación financiera y análisis de riesgos
EP Unidad03: Planificación financiera y análisis de riesgos
 
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidosAD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
 
AD Unidad1: Fundamentos de sistemas paralelos y distribuidos
AD Unidad1: Fundamentos de sistemas paralelos y distribuidosAD Unidad1: Fundamentos de sistemas paralelos y distribuidos
AD Unidad1: Fundamentos de sistemas paralelos y distribuidos
 
EP Unidad01: Principios básicos de la metodología de proyectos
EP Unidad01: Principios básicos de la metodología de proyectosEP Unidad01: Principios básicos de la metodología de proyectos
EP Unidad01: Principios básicos de la metodología de proyectos
 
EP Unidad02: Conceptos para el alcance, tiempo y muestra
EP Unidad02: Conceptos para el alcance, tiempo y muestraEP Unidad02: Conceptos para el alcance, tiempo y muestra
EP Unidad02: Conceptos para el alcance, tiempo y muestra
 
GCSW Unidad1: Objetos de la Gestión de Configuración del Software
GCSW Unidad1: Objetos de la Gestión de Configuración del SoftwareGCSW Unidad1: Objetos de la Gestión de Configuración del Software
GCSW Unidad1: Objetos de la Gestión de Configuración del Software
 
GCSW Unidad2: Actividades de la gestión de configuración del software
GCSW Unidad2: Actividades de la gestión de configuración del software GCSW Unidad2: Actividades de la gestión de configuración del software
GCSW Unidad2: Actividades de la gestión de configuración del software
 
POO Unidad 4: Persistencia de objetos y manejo de archivos
POO Unidad 4: Persistencia de objetos y manejo de archivosPOO Unidad 4: Persistencia de objetos y manejo de archivos
POO Unidad 4: Persistencia de objetos y manejo de archivos
 
POO Unidad 3: Interfaz gráfica de usuario e hilos
POO Unidad 3: Interfaz gráfica de usuario e hilosPOO Unidad 3: Interfaz gráfica de usuario e hilos
POO Unidad 3: Interfaz gráfica de usuario e hilos
 
POO Unidad 2: Programación Orientada a Objetos
POO Unidad 2: Programación Orientada a ObjetosPOO Unidad 2: Programación Orientada a Objetos
POO Unidad 2: Programación Orientada a Objetos
 
POO Unidad 1: Introducción a la Programación Orientada a Objetos
POO Unidad 1: Introducción a la Programación Orientada a ObjetosPOO Unidad 1: Introducción a la Programación Orientada a Objetos
POO Unidad 1: Introducción a la Programación Orientada a Objetos
 
RD Unidad 3: IPv6, Routers y Enrutamiento
RD Unidad 3: IPv6, Routers y EnrutamientoRD Unidad 3: IPv6, Routers y Enrutamiento
RD Unidad 3: IPv6, Routers y Enrutamiento
 

DB1 Unidad 6: Indices

  • 1. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 1 12/03/2022 Índices Unidad 6 Material docente compilado por el profesor Ph.D. Franklin Parrales Bravo para uso de los cursos de Bases de Datos
  • 2. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 2 12/03/2022 Objetivo general de la Unidad 6 Capacitar al estudiante para que decida donde y qué tipo de índices deben ser creados para mejorar el rendimiento de las consultas en la base de datos.
  • 3. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 3 12/03/2022 Diseño físico ▪ Especificación de estructuras de almacenamiento internas (InnoDB vs MyISAM) y caminos de acceso específicos (índices) para que las diversas aplicaciones que accedan a la BD tengan un buen rendimiento ▪ Cada SGBD ofrece varias opciones: ▪ Diferentes tipos de ÍNDICES ▪ Agrupamiento de registros (de distinto tipo) relacionados en los mismos bloques de disco (CLUSTER de ficheros) ▪ Distintos tipos de técnicas de dispersión (HASHING) ▪ Diferentes valores para los parámetros físicos (tamaño de bloque, de buffers, ...) ▪ ... ▪ El diseño físico es muy dependiente del SGBD comercial seleccionado ▪ Una vez elegido el SGBD, el Diseño Físico consiste en la elección e implementación de las estructuras más apropiadas para los archivos de la BD, entre las opciones que ofrece el SGBD
  • 4. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 4 12/03/2022 Contenido ▪ ¿Qué es un índice? ▪ Primary Key ▪ Índice Clúster (Índice primario) ▪ Índice no clúster (Índice secundario) ▪ UNIQUE Key Index ▪ Composite Index ▪ Covering Index ▪ Partial Index ▪ Detrás de cámaras ▪ Reconstrucción de índices ▪ Directrices generales de indexación
  • 5. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 5 12/03/2022 Heap Files ⚫ Filas son añadidas al final del archivo a medida que se insertan ⚫ Por lo tanto, el archivo está desordenado. ⚫ Bueno para escanear ⚫ Las filas eliminadas crean espacios en el archivo ⚫ El archivo debe compactarse periódicamente para recuperar espacio 5 Conjunto de registros
  • 6. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 6 12/03/2022 Índices ▪ Un índice es una estructura de datos que proporciona acceso eficiente a un conjunto de registros(tuplas) ▪ Las hojas del índice son punteros a registros. Los nodos internos del índice definen su estructura de datos.. Conjunto de registros Condición sobre el valor del atributo (a>2) Registros coincidentes (a) clave de búsqueda (search key) índice
  • 7. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 7 12/03/2022 ÍNDICES • Son el mecanismo de acceso más dinámico: se pueden añadir, suprimir, redefinir índices de forma más fácil que cambiar una secuencia de clúster, redefinir una clave de dispersión o cambiar cualquier otro parámetro que afecte al almacenamiento físico de la BD. → se puede posponer la especificación de índices para el final del proceso de diseño e incluso después de la implementación inicial de la BD. • Estructura común a muchos SGBD: B-trees → soporta bien diferentes tipos de consultas (por rango, valores extremos MIN-MAX, ...), inserciones frecuentes, ... • Pueden ser usados para: ✓ Evitar examinar la tabla completa (Full table scan) (se utiliza el índice para realizar la examinación) → para ser útil: suma de E/S a índice + E/S a tabla < E/S a tabla. ✓ Limitar el alcance del examen a tabla: cluster index, ordenación. ✓ Evitar una ordenación. ✓ Evitar el acceso a las tablas para determinadas consultas.
  • 8. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 8 12/03/2022 ¿Qué es un índice? ▪ En terminología simple, un índice asigna claves de búsqueda a los datos correspondientes en el disco mediante diferentes estructuras de datos en memoria y en disco. ▪ El índice se utiliza para acelerar la búsqueda al reducir el número de registros a buscar. ▪ En su mayoría, se crea un índice en las columnas especificadas en la cláusula WHERE de una consulta a medida que la base de datos recupera y filtra datos de las tablas en función de esas columnas. ▪ Si no crea un índice, la base de datos escanea todas las filas, filtra las filas coincidentes y devuelve el resultado. ▪ Con millones de registros, esta operación de escaneo puede demorar muchos segundos y este alto tiempo de respuesta hace que las API y las aplicaciones sean más lentas e inutilizables
  • 9. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 9 12/03/2022 Ejemplo Simple en SQL create index nc on employees (hundreds2); create table employees( ssnum integer not null, name varchar(20) not null, lat real, long real, hundreds1 real, hundreds2 real ); create index nc1 on employees (hundreds2, ssnum, name) select ssnum,name from employees where hundreds2 > 10;
  • 10. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 10 12/03/2022 Veamos un ejemplo sobre MySQL… ▪ Usaremos MySQL con el motor de base de datos InnoDB, aunque los conceptos explicados en esta unidad son más o menos los mismos que se aplican en otros servidores de bases de datos como Oracle, MSSQL, etc. ▪ Cree una tabla llamada index_demo con el siguiente esquema: CREATE TABLE index_demo ( name VARCHAR(20) NOT NULL, age INT, pan_no VARCHAR(20), phone_no VARCHAR(20) )ENGINE=INNODB;
  • 11. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 11 12/03/2022 Veamos un ejemplo… ▪ ¿Cómo verificamos que estamos usando el motor InnoDB? Ejecute el siguiente comando: SHOW TABLE STATUS WHERE name = 'index_demo' G;
  • 12. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 12 12/03/2022 Veamos un ejemplo… ▪ Ahora inserte algunos datos aleatorios en la tabla, mi tabla con 5 filas se ve así: ▪ No he creado ningún índice hasta ahora en esta tabla. Verifiquemos esto con el comando: SHOW INDEX. Devuelve 0 resultados.
  • 13. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 13 12/03/2022 Veamos un ejemplo… ▪ En este momento, si ejecutamos una consulta SELECT simple, dado que no hay un índice definido por el usuario, la consulta escaneará toda la tabla para encontrar el resultado: EXPLAIN SELECT * FROM index_demo WHERE name = 'alex'; ▪ EXPLAIN muestra cómo el motor de consultas planea ejecutar la consulta. ▪ En la captura de pantalla anterior, puede ver que la columna de rows devuelve 5 y possible_keys devuelve NULL. ▪ possible_keys representa todos los índices disponibles que se pueden usar en esta consulta. ▪ La columna key representa qué índice se utilizará realmente de todos los índices posibles en esta consulta.
  • 14. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 14 12/03/2022 Contenido ▪ ¿Qué es un índice? ▪ Primary Key ▪ Índice Clúster (Índice primario) ▪ Índice no clúster (Índice secundario) ▪ UNIQUE Key Index ▪ Composite Index ▪ Covering Index ▪ Partial Index ▪ Detrás de cámaras ▪ Reconstrucción de índices ▪ Directrices generales de indexación
  • 15. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 15 12/03/2022 Claves de búsqueda (Search Keys) ⚫ Una clave de búsqueda (search key) es una secuencia de atributos/columnas. create index i1 on accounts(branchnum, balance); ⚫ Tipos de Claves ⚫ Secuencial: el valor de la clave es monotónico con el orden de inserción (por ejemplo, contador o timestamp/marca de tiempo) ⚫ No secuencial: el valor de la clave no está relacionado con la orden de inserción (por ejemplo, número de seguro social)
  • 16. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 16 12/03/2022 Primary Key ▪ La consulta anterior es muy ineficiente. Para optimizar dicha consulta haremos de la columna phone_no una Primary Key asumiendo que no pueden existir dos usuarios en nuestro sistema con el mismo número de teléfono. ▪ Tenga en cuenta lo siguiente al crear una clave principal: ▪ Una Primary Key debe ser parte de muchas consultas vitales en su aplicación. ▪ La Primary Key es una restricción que identifica de forma única cada fila de una tabla. Si varias columnas forman parte de la Primary Key, esa combinación debe ser única para cada fila. ▪ La Primary Key debe ser no nula. Nunca haga de los campos nulos su Primary Key. ▪ Según los estándares ANSI SQL, las Primary Key deben ser comparables entre sí, y definitivamente debería poder saber si el valor de la columna de la Primary Key para una fila en particular es mayor, menor o igual que el mismo de otra fila. ▪ Dado que NULL significa un valor indefinido en los estándares SQL, no puede comparar NULL de manera determinista con ningún otro valor, por lo que lógicamente NULL no está permitido. ▪ El tipo de Primary Key ideal debería ser un número como INT o BIGINT porque las comparaciones de enteros son más rápidas, por lo que atravesar el índice será muy rápido. A menudo, definimos un campo de identificación como AUTO INCREMENT en las tablas y lo usamos como Primary Key, pero la elección de una clave principal depende de los desarrolladores.
  • 17. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 17 12/03/2022 ¿Qué sucede si no crea ninguna Primary Key usted mismo? ▪ No es obligatorio crear una Primary Key usted mismo. Si no ha definido ninguna Primary Key, InnoDB implícitamente crea una para usted porque, por diseño, InnoDB debe tener una Primary Key en cada tabla. Entonces, una vez que crea una Primary Key más adelante para esa tabla, InnoDB elimina la Primary Key previamente definida automáticamente. ▪ Como no tenemos ninguna Primary Key definida a partir de ahora, veamos qué creó InnoDB por defecto para nosotros: SHOW EXTENDED INDEX FROM index_demo; EXTENDED muestra todos los índices que no son utilizables por el usuario pero administrados completamente por MySQL.
  • 18. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 18 12/03/2022 ¿Qué sucede si no crea ninguna Primary Key usted mismo? ▪ Aquí vemos que MySQL ha definido un índice compuesto (hablaremos de los índices compuestos más adelante) en DB_ROW_ID, DB_TRX_ID, DB_ROLL_PTR y todas las columnas definidas en la tabla. ▪ En ausencia de una clave principal definida por el usuario, este índice se utiliza para buscar registros de forma única.
  • 19. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 19 12/03/2022 ¿Cuál es la diferencia entre key (clave) e index (índice)? ▪ Aunque los términos key e index se usan indistintamente, key significa una restricción impuesta sobre el comportamiento de la columna. En este caso, la restricción es que la Primary Key es un campo no nulo que identifica de forma única cada fila. Por otro lado, el índice es una estructura de datos especial que facilita la búsqueda de datos en la tabla. ▪ Ahora creemos el Primary Key en phone_no y examinemos el índice creado: ▪ Tenga en cuenta que CREATE INDEX no se puede usar para crear un Primary Key, pero se usa ALTER TABLE. ALTER TABLE index_demo ADD PRIMARY KEY (phone_no); SHOW INDEXES FROM index_demo;
  • 20. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 20 12/03/2022 ¿Cuál es la diferencia entre key (clave) e index (índice)? En la captura de pantalla anterior, vemos que se crea un índice principal en la columna phone_no. Las columnas de las siguientes imágenes se describen de la siguiente manera: ▪ Table: la tabla en la que se crea el índice. ▪ Non_unique: si el valor es 1, el índice no es único, si el valor es 0, el índice es único. ▪ Key_name: El nombre del índice creado. El nombre del primary index siempre es PRIMARY en MySQL, independientemente de si proporcionó algún nombre de índice o no al crear el índice. ▪ Seq_in_index: el número de secuencia de la columna en el índice. Si varias columnas forman parte del índice, el número de secuencia se asignará en función de cómo se ordenaron las columnas durante el tiempo de creación del índice. El número de secuencia comienza desde 1.
  • 21. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 21 12/03/2022 ¿Cuál es la diferencia entre key (clave) e index (índice)? ▪ Collation: cómo se ordena la columna en el índice. A significa ascendente, D significa descendente, NULL significa no ordenado. ▪ Cardinality: el número estimado de valores únicos en el índice. Más cardinalidad significa mayores posibilidades de que el optimizador de consultas elija el índice para las consultas. ▪ Sub_part: el prefijo del índice. Es NULL si se indexa toda la columna. De lo contrario, muestra el número de bytes indexados en caso de que la columna esté parcialmente indexada. Definiremos el índice parcial más adelante. ▪ Packed: indica cómo se empaqueta la clave; NULL si no lo es. ▪ Null: SÍ si la columna puede contener valores NULOS y en blanco si no los contiene. ▪ Index_type: indica qué estructura de datos de indexación se utiliza para este índice. Algunos posibles candidatos son: BTREE, HASH, RTREE o FULLTEXT. ▪ Comment: La información sobre el índice no descrita en su propia columna. ▪ Index_comment: el comentario para el índice especificado cuando creó el índice con el atributo COMMENT.
  • 22. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 22 12/03/2022 ¿Cuál es la diferencia entre key (clave) e index (índice)? ▪ Ahora veamos si este índice reduce el número de filas que se buscarán para un phone_no determinado en la cláusula WHERE de una consulta. ▪ En esta captura, observe que la columna de rows solo ha devuelto 1, las possible_keys & key devuelven PRIMARY. ▪ Entonces, esencialmente significa que al usar el índice principal llamado PRIMARY (el nombre se asigna automáticamente cuando crea la Primary Key), el optimizador de consultas simplemente va directamente al registro y lo obtiene. ▪ Es muy eficiente. Esto es exactamente para lo que sirve un índice: minimizar el alcance de la búsqueda a costa de espacio adicional. EXPLAIN SELECT * FROM index_demo WHERE phone_no = '9281072002';
  • 23. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 23 12/03/2022 Contenido ▪ ¿Qué es un índice? ▪ Primary Key ▪ Índice Clúster (Índice primario) ▪ Índice no clúster (Índice secundario) ▪ UNIQUE Key Index ▪ Composite Index ▪ Covering Index ▪ Partial Index ▪ Detrás de cámaras ▪ Reconstrucción de índices ▪ Directrices generales de indexación
  • 24. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 24 12/03/2022 Índice Clúster (Índice primario) ▪ Un índice clúster se coloca con los datos en el mismo espacio de tablas o el mismo archivo de disco. ▪ Puede considerar que un índice clúster sigue una representación B-Tree cuyos nodos de hoja son los bloques de datos reales en el disco, ya que el índice y los datos residen juntos. ▪ Este tipo de índice organiza físicamente los datos en el disco según el orden lógico de la clave de índice. Records Un índice clúster en el atributo X coloca registros cuyos valores X están cerca uno del otro.
  • 25. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 25 12/03/2022 ¿Qué significa la organización física de los datos? ▪ Físicamente, los datos se organizan en el disco en miles o millones de discos/bloques de datos. ▪ Para un índice clúster, no es obligatorio que todos los bloques de disco se almacenen de forma contigua(contagiously stored). ▪ Los bloques de datos físicos se mueven todo el tiempo aquí y allá por el sistema operativo cuando es necesario. ▪ Un sistema de base de datos no tiene ningún control absoluto sobre cómo se administra el espacio de datos físicos, pero dentro de un bloque de datos, los registros se pueden almacenar o administrar en el orden lógico del index key.
  • 26. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 26 12/03/2022 ¿Qué significa la organización física de los datos? El siguiente diagrama simplificado lo explica: ▪ El rectángulo grande de color amarillo representa un bloque de disco/bloque de datos ▪ Los rectángulos de color azul representan datos almacenados como filas dentro de ese bloque ▪ El área de pie de página representa el índice del bloque donde residen pequeños rectángulos de color rojo en el orden ordenado de una clave en particular. Estos pequeños bloques no son más que una especie de punteros que apuntan a los offsets de los registros.
  • 27. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 27 12/03/2022 ¿Qué significa la organización física de los datos? ▪ Los registros se almacenan en el bloque de disco en cualquier orden arbitrario. Cada vez que se agregan nuevos registros, se agregan en el siguiente espacio disponible. Cada vez que se actualiza un registro existente, el sistema operativo decide si ese registro aún puede caber en la misma posición o se debe asignar una nueva posición para ese registro. ▪ Por lo tanto, la posición de los registros es manejada completamente por el sistema operativo y no existe una relación definida entre el orden de dos registros. Para recuperar los registros en el orden lógico de la clave, las páginas del disco contienen una sección de índice en el pie de página, el índice contiene una lista de punteros de desplazamiento en el orden de la clave. Cada vez que se modifica o crea un registro, se ajusta el índice. ▪ De esta manera, realmente no necesita preocuparse por organizar el registro físico en un orden determinado, sino que se mantiene una pequeña sección de índice en ese orden y obtener o mantener registros se vuelve muy fácil.
  • 28. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 28 12/03/2022 Ventaja del índice clúster: ▪ Esta ordenación o ubicación conjunta de datos relacionados en realidad hace que un índice clúster sea más rápido. ▪ Cuando se obtienen datos del disco, el sistema lee el bloque completo que contiene los datos, ya que nuestro sistema de E/S del disco escribe y lee datos en bloques. ▪ Entonces, en el caso de consultas de rango, es muy posible que los datos colocados se almacenen en la memoria. ▪ Digamos que requieres ejecutar la siguiente consulta: SELECT * FROM index_demo WHERE phone_no > '9010000000’ AND phone_no < '9020000000'
  • 29. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 29 12/03/2022 Ventaja del índice clúster: ▪ Un bloque de datos se recupera en la memoria cuando se ejecuta la consulta. Digamos que el bloque de datos contiene phone_no en el rango de 9010000000 a 9030000000. Entonces, cualquier rango que haya solicitado en la consulta es solo un subconjunto de los datos presentes en el bloque. ▪ Si ahora activa la siguiente consulta para obtener todos los números de teléfono en el rango, digamos desde 9015000000 hasta 9019000000, no necesita obtener más bloques del disco. ▪ Los datos completos se pueden encontrar en el bloque de datos actual, por lo que clustered_index reduce la cantidad de E/S de disco colocando los datos relacionados tanto como sea posible en el mismo bloque de datos. Esta reducida E/S de disco provoca una mejora en el rendimiento. ▪ Entonces, si tiene una primary key bien elegida y sus consultas se basan en la primary key, el rendimiento será súper rápido.
  • 30. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 30 12/03/2022 Relación entre Primary Key e Índice Clúster: ▪ No puede crear un índice clúster manualmente usando InnoDB en MySQL. MySQL lo elige por ti. Pero, ¿cómo elige? Los siguientes extractos son de la documentación de MySQL: ▪ Cuando define una PRIMARY KEY en su tabla, InnoDB la usa como índice agrupado. Defina una clave principal para cada tabla que cree. Si no hay una columna lógica única y no nula o un conjunto de columnas, agregue una nueva columna auto- increment, cuyos valores se completan automáticamente. ▪ Si no define una PRIMARY KEY para su tabla, MySQL ubica el primer índice UNIQUE donde todas las columnas key (clave) son NOT NULL e InnoDB lo usa como índice clúster.
  • 31. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 31 12/03/2022 Relación entre Primary Key e Índice Clúster: ▪ Si la tabla no tiene PRIMARY KEY o un índice UNIQUE adecuado, InnoDB genera internamente un índice clúster oculto llamado GEN_CLUST_INDEX en una columna sintética que contiene valores de ID de fila. Las filas están ordenadas por el ID que InnoDB asigna a las filas en dicha tabla. El ID de fila es un campo de 6 bytes que aumenta de forma monótona a medida que se insertan nuevas filas. Por lo tanto, las filas ordenadas por ID de fila están físicamente en orden de inserción. ▪ En resumen, el motor MySQL InnoDB en realidad administra el índice principal como un índice clúster para mejorar el rendimiento, por lo que la primary key y el registro real en el disco se agrupan juntos.
  • 32. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 32 12/03/2022 Estructura del Primary key (clustered) Index: ▪ Un índice generalmente se mantiene como un árbol B+ en el disco y en la memoria, y cualquier índice se almacena en bloques en el disco. Estos bloques se denominan bloques de índice. ▪ Las entradas en el bloque de índice siempre se ordenan en la clave de índice/búsqueda. El bloque de índice de hoja del índice contiene un localizador de filas. Para el índice principal, el localizador de filas se refiere a la dirección virtual de la ubicación física correspondiente de los bloques de datos en el disco donde residen las filas que se ordenan según la clave de índice.
  • 33. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 33 12/03/2022 Estructura del Primary key (clustered) Index: ▪ En el siguiente diagrama, los rectángulos del lado izquierdo representan bloques de índice de nivel de hoja y los rectángulos del lado derecho representan los bloques de datos. ▪ Lógicamente, los bloques de datos parecen estar alineados en un orden ordenado, pero como ya se describió anteriormente, las ubicaciones físicas reales pueden estar dispersas aquí y allá.
  • 34. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 34 12/03/2022 Índice Clúster Índex tiene una estructura para hacer mas rápida la búsqueda. Hace que el último nivel sea ordenado físicamente, implica que todo registro que aparezca en esa página va a estar ordenado. Así pues, SOLO SE PUEDE CREAR UN INDICE CLUSTER POR TABLA. Index page Data Page Dado que un índice clúster afecta la organización física de los datos, solo puede haber un índice clúster por tabla.
  • 35. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 35 12/03/2022 Índice Clúster
  • 36. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 36 12/03/2022 Índice Clúster
  • 37. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 37 12/03/2022 Índice Clúster
  • 38. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 38 12/03/2022 ¿Es posible crear un primary index en una clave no primaria? ▪ En MySQL, un índice principal se crea automáticamente y ya hemos descrito anteriormente cómo MySQL elige el índice principal. ▪ Pero en el mundo de las bases de datos, en realidad no es necesario crear un índice en la columna de primary key; el índice principal también se puede crear en cualquier columna que no es primary key. ▪ Pero cuando se crea en la primary key, todas las entradas de clave son únicas en el índice, mientras que en el otro caso, el índice principal también puede tener una clave duplicada.
  • 39. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 39 12/03/2022 ¿Es posible eliminar una primary key? ▪ Es posible eliminar una primary key. Cuando elimina una primary key, el índice clúster relacionado y la propiedad de unicidad de esa columna se pierden. ALTER TABLE `index_demo` DROP PRIMARY KEY; - If the primary key does not exist, you get the following error: "ERROR 1091 (42000): Can't DROP 'PRIMARY'; check that column/key exists"
  • 40. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 40 12/03/2022 Ventajas y desventajas de un Primary Index Ventajas ▪ Las consultas de rango basadas en el Primary Index son muy eficientes. Puede existir la posibilidad de que el bloque de disco que la base de datos ha leído del disco contenga todos los datos que pertenecen a la consulta, ya que el Primary Index está agrupado(clusterizado) y los registros están ordenados físicamente. Entonces, la localidad de los datos puede ser proporcionada por el Primary Index. ▪ Cualquier consulta que aproveche la Primary Key es muy rápida. Desventajas ▪ Dado que el Primary Index contiene una referencia directa a la dirección del bloque de datos a través del espacio de direcciones virtuales y los bloques de disco están organizados físicamente en el orden de la clave de índice, cada vez que el sistema operativo realiza alguna división de página del disco debido a operaciones DML como INSERTAR / ACTUALIZAR / ELIMINAR, el índice principal también debe actualizarse. Por lo tanto, las operaciones DML ejercen cierta presión sobre el rendimiento del Primary Index.
  • 41. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 41 12/03/2022 Contenido ▪ ¿Qué es un índice? ▪ Primary Key ▪ Índice Clúster (Índice primario) ▪ Índice no clúster (Índice secundario) ▪ UNIQUE Key Index ▪ Composite Index ▪ Covering Index ▪ Partial Index ▪ Detrás de cámaras ▪ Reconstrucción de índices ▪ Directrices generales de indexación
  • 42. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 42 12/03/2022 Índice NO Clúster(Índice secundario) ▪ Cualquier índice que no sea un índice clúster se denomina índice secundario. ▪ Los índices secundarios no afectan las ubicaciones de almacenamiento físico a diferencia de los índices primarios. ▪ ¿Cuándo necesita un índice secundario? ▪ Es posible que tenga varios casos de uso en su aplicación en los que no consulta la base de datos con una clave principal. ▪ En nuestro ejemplo, phone_no es la clave principal, pero es posible que necesitemos consultar la base de datos con pan_no o name. ▪ En tales casos, necesita índices secundarios en estas columnas si la frecuencia de tales consultas es muy alta. Records ⚫ Un índice no clúster no restringe la organización de la tabla. ⚫ Puede haber varios índices no clúster por tabla.
  • 43. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 43 12/03/2022 ¿Cómo crear un índice secundario en MySQL? ▪ El siguiente comando crea un índice secundario en la columna de nombre en la tabla index_demo. CREATE INDEX secondary_idx_1 ON index_demo (name);
  • 44. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 44 12/03/2022 Estructura del índice secundario: ▪ En el siguiente diagrama, los rectángulos de color rojo representan bloques de índice secundarios. El índice secundario también se mantiene en el Árbol B+ y se ordena según la clave en la que se creó el índice. Los nodos hoja contienen una copia de la clave de los datos correspondientes en el índice principal. ▪ Entonces, para entender, puede suponer que el índice secundario tiene una referencia a la dirección de la clave principal, aunque no es el caso. La recuperación de datos a través del índice secundario significa que tiene que atravesar dos árboles B+: uno es el árbol B+ del índice secundario y el otro es el árbol B+ del índice primario.
  • 45. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 45 12/03/2022 Estructura del índice secundario:
  • 46. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 46 12/03/2022 Índice No Clúster ▪ No ordena la pagina de datos, cada registro que tiene en el ultimo nivel, cada registro que tiene se ata a un puntero de tablas.
  • 47. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 47 12/03/2022 Índice No Clúster
  • 48. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 48 12/03/2022 Ventajas y desventajas de un Secondary Index Ventajas ▪ Lógicamente puedes crear tantos índices secundarios como quieras. ▪ Pero, en realidad, cuántos índices realmente se requieren requiere un proceso de reflexión serio, ya que cada índice tiene su propia penalización. Desventajas ▪ Con operaciones DML como DELETE / INSERT , el índice secundario también debe actualizarse para que la copia de la columna de la clave principal pueda eliminarse / insertarse. En tales casos, la existencia de muchos índices secundarios puede crear problemas. ▪ Además, si una clave principal es muy grande como una URL, dado que los índices secundarios contienen una copia del valor de la columna de la clave principal, puede ser ineficiente en términos de almacenamiento. ▪ Más claves secundarias significan una mayor cantidad de copias duplicadas del valor de la columna de la clave principal, por lo tanto, más almacenamiento en el caso de una clave principal grande. Además, la clave principal en sí misma almacena las claves, por lo que el efecto combinado en el almacenamiento será muy alto.
  • 49. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 49 12/03/2022 Consideración antes de eliminar un Primary Index: ▪ En MySQL, puede eliminar un primary index eliminando la primary key. ▪ Ya hemos visto que un índice secundario depende de un índice primario. ▪ Entonces, si elimina un índice principal, todos los índices secundarios deben actualizarse para contener una copia de la nueva clave de índice principal que MySQL ajusta automáticamente. ▪ Este proceso es costoso cuando existen varios índices secundarios. Además, otras tablas pueden tener una referencia de clave externa a la clave principal, por lo que debe eliminar esas referencias de clave externa antes de eliminar la clave principal. ▪ Cuando se elimina una primary key, MySQL crea automáticamente otra primary key internamente, y esa es una operación costosa.
  • 50. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 50 12/03/2022 Contenido ▪ ¿Qué es un índice? ▪ Primary Key ▪ Índice Clúster (Índice primario) ▪ Índice no clúster (Índice secundario) ▪ UNIQUE Key Index ▪ Composite Index ▪ Covering Index ▪ Partial Index ▪ Detrás de cámaras ▪ Reconstrucción de índices ▪ Directrices generales de indexación
  • 51. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 51 12/03/2022 UNIQUE Key Index: ▪ Al igual que las primary keys, las unique keys también pueden identificar registros de forma única con una diferencia: la columna de unique keys (clave única) puede contener valores nulos. ▪ A diferencia de otros servidores de bases de datos, en MySQL una columna de unique key puede tener tantos valores nulos como sea posible. En el estándar SQL, nulo significa un valor indefinido. Entonces, si MySQL tiene que contener solo un valor nulo en una columna de unique keys, debe asumir que todos los valores nulos son iguales. ▪ Pero, lógicamente, esto no es correcto, ya que nulo significa indefinido, y los valores indefinidos no se pueden comparar entre sí, es la naturaleza de nulo. Como MySQL no puede afirmar si todos los valores nulos significan lo mismo, permite múltiples valores nulos en la columna.
  • 52. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 52 12/03/2022 UNIQUE Key Index: ▪ El siguiente comando muestra cómo crear un índice de clave única(unique key) en MySQL: CREATE UNIQUE INDEX unique_idx_1 ON index_demo (pan_no);
  • 53. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 53 12/03/2022 Contenido ▪ ¿Qué es un índice? ▪ Primary Key ▪ Índice Clúster (Índice primario) ▪ Índice no clúster (Índice secundario) ▪ UNIQUE Key Index ▪ Composite Index ▪ Covering Index ▪ Partial Index ▪ Detrás de cámaras ▪ Reconstrucción de índices ▪ Directrices generales de indexación
  • 54. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 54 12/03/2022 Composite Index: ▪ MySQL le permite definir índices en múltiples columnas, hasta 16 columnas. Este índice se denomina índice multicolumna/compuesto/compuesto. ▪ Digamos que tenemos un índice definido en 4 columnas: col1, col2, col3, col4. ▪ Con un índice compuesto, tenemos capacidad de búsqueda en col1, (col1, col2) , (col1, col2, col3) , (col1, col2, col3, col4). ▪ Entonces podemos usar cualquier prefijo del lado izquierdo de las columnas indexadas, pero no podemos omitir una columna del medio y usar eso como - (col1, col3) o (col1, col2, col4) o col3 o col4 etc. Estos son combinaciones inválidas. ▪ Los siguientes comandos crean 2 índices compuestos en nuestra tabla: CREATE INDEX composite_index_1 ON index_demo (phone_no, name, age); CREATE INDEX composite_index_2 ON index_demo (pan_no, name, age);
  • 55. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 55 12/03/2022 Composite Index: ▪ Si tiene consultas que contienen una cláusula WHERE en varias columnas, escriba la cláusula en el orden de las columnas del índice compuesto. El índice beneficiará esa consulta. De hecho, mientras decide las columnas para un índice compuesto, puede analizar diferentes casos de uso de su sistema e intentar determinar el orden de las columnas que beneficiará a la mayoría de sus casos de uso. ▪ Los índices compuestos también pueden ayudarlo en las consultas JOIN & SELECT. Ejemplo: en la siguiente consulta SELECT *, se utiliza composite_index_2. ▪ Cuando se definen varios índices, el optimizador de consultas de MySQL elige el índice que elimina la mayor cantidad de filas o escanea la menor cantidad de filas posible para una mayor eficiencia.
  • 56. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 56 12/03/2022 ¿Por qué usamos índices compuestos? ¿Por qué no definir múltiples índices secundarios en las columnas que nos interesan? ▪ MySQL usa solo un índice por tabla por consulta, excepto para la UNION. (En la UNION, cada consulta lógica se ejecuta por separado y los resultados se fusionan). Por lo tanto, definir varios índices en varias columnas no garantiza que esos índices se utilizarán incluso si son parte de la consulta. ▪ MySQL mantiene algo llamado estadísticas de índice que ayuda a MySQL a inferir cómo se ven los datos en el sistema. Sin embargo, las estadísticas de índice son una generalización, pero en función de estos metadatos, MySQL decide qué índice es apropiado para la consulta actual.
  • 57. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 57 12/03/2022 ¿Cómo funciona el índice compuesto? ▪ Las columnas utilizadas en los índices compuestos se concatenan juntas y esas claves concatenadas se almacenan ordenadas mediante un árbol B+. Cuando realiza una búsqueda, la concatenación de sus claves de búsqueda se compara con las del índice compuesto. Entonces, si hay alguna discrepancia entre el orden de las claves de búsqueda y el orden de las columnas del índice compuesto, no se puede usar el índice. ▪ En nuestro ejemplo, para el siguiente registro, se forma una clave de índice compuesto al concatenar pan_no, name, age — HJKXS9086Wkousik28. +--------+------+------------+------------+ name age pan_no phone_no +--------+------+------------+------------+ kousik 28 HJKXS9086W 9090909090
  • 58. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 58 12/03/2022 ¿Cómo identificar si necesita un índice compuesto?: ▪ Analice sus consultas primero de acuerdo con sus casos de uso. Si ve que ciertos campos aparecen juntos en muchas consultas, puede considerar crear un índice compuesto. ▪ Si está creando un índice en col1 y un índice compuesto en (col1, col2), entonces solo el índice compuesto debería estar bien. col1 solo puede ser atendido por el índice compuesto en sí mismo, ya que es un prefijo del lado izquierdo del índice. ▪ Considere la cardinalidad. Si las columnas utilizadas en el índice compuesto terminan teniendo una alta cardinalidad juntas, son buenas candidatas para el índice compuesto.
  • 59. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 59 12/03/2022 Contenido ▪ ¿Qué es un índice? ▪ Primary Key ▪ Índice Clúster (Índice primario) ▪ Índice no clúster (Índice secundario) ▪ UNIQUE Key Index ▪ Composite Index ▪ Covering Index ▪ Partial Index ▪ Detrás de cámaras ▪ Reconstrucción de índices ▪ Directrices generales de indexación
  • 60. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 60 12/03/2022 Covering Index: ▪ Un índice de cobertura(covering) es un tipo especial de índice compuesto donde todas las columnas especificadas en la consulta existen en alguna parte del índice. Por lo tanto, el optimizador de consultas no necesita acceder a la base de datos para obtener los datos, sino que obtiene el resultado del índice mismo. ▪ Ejemplo: ya hemos definido un índice compuesto en (pan_no, name, age), así que ahora considere la siguiente consulta: ▪ Las columnas mencionadas en las cláusulas SELECT & WHERE son parte del índice compuesto. Entonces, en este caso, podemos obtener el valor de la columna de edad del propio índice compuesto. Veamos qué muestra el comando EXPLAIN para esta consulta: SELECT age FROM index_demo WHERE pan_no = 'HJKXS9086W' AND name = 'kousik' EXPLAIN FORMAT=JSON SELECT age FROM index_demo WHERE pan_no = 'HJKXS9086W’ AND name = '111kousik1';
  • 61. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 61 12/03/2022
  • 62. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 62 12/03/2022 Covering Index: ▪ En la respuesta anterior, tenga en cuenta que hay una clave: using_index que se establece en verdadero, lo que significa que el índice de cobertura se ha utilizado para responder a la consulta. ▪ No sé cuánto se aprecian los índices de cobertura en entornos de producción, pero aparentemente parece ser una buena optimización en caso de que la consulta cumpla con los requisitos.
  • 63. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 63 12/03/2022 Contenido ▪ ¿Qué es un índice? ▪ Primary Key ▪ Índice Clúster (Índice primario) ▪ Índice no clúster (Índice secundario) ▪ UNIQUE Key Index ▪ Composite Index ▪ Covering Index ▪ Partial Index ▪ Detrás de cámaras ▪ Reconstrucción de índices ▪ Directrices generales de indexación
  • 64. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 64 12/03/2022 Partial Index: ▪ Ya sabemos que los Índices agilizan nuestras consultas a costa del espacio. Cuantos más índices tenga, mayor será el requisito de almacenamiento. ▪ Ya hemos creado un índice llamado second_idx_1 en el nombre de la columna. El nombre de la columna puede contener valores grandes de cualquier longitud. ▪ También en el índice, los metadatos de los localizadores de fila o punteros de fila tienen su propio tamaño. Entonces, en general, un índice puede tener una alta carga de almacenamiento y memoria.
  • 65. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 65 12/03/2022 Partial Index: ▪ En MySQL, también es posible crear un índice en los primeros bytes de datos. ▪ Ejemplo: el siguiente comando crea un índice en los primeros 4 bytes del nombre. ▪ Aunque este método reduce la sobrecarga de memoria en cierta cantidad, el índice no puede eliminar muchas filas, ya que en este ejemplo los primeros 4 bytes pueden ser comunes a muchos nombres. ▪ Por lo general, este tipo de indexación de prefijos se admite en las columnas de tipo CHAR, VARCHAR, BINARY, VARBINARY. CREATE INDEX secondary_index_1 ON index_demo (name(4));
  • 66. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 66 12/03/2022 Contenido ▪ ¿Qué es un índice? ▪ Primary Key ▪ Índice Clúster (Índice primario) ▪ Índice no clúster (Índice secundario) ▪ UNIQUE Key Index ▪ Composite Index ▪ Covering Index ▪ Partial Index ▪ Detrás de cámaras ▪ Reconstrucción de índices ▪ Directrices generales de indexación
  • 67. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 67 12/03/2022 ¿Qué sucede detrás de cámaras cuando definimos un índice? ▪ Ejecutemos de nuevo el comando SHOW EXTENDED SHOW EXTENDED INDEXES FROM index_demo;
  • 68. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 68 12/03/2022 ¿Qué sucede detrás de cámaras cuando definimos un índice? ▪ Definimos el secondary_index_1 en nombre, pero MySQL ha creado un índice compuesto en (nombre, número_teléfono) donde número_teléfono es la columna de primary key. ▪ Creamos secondary_index_2 en age y MySQL creó un índice compuesto en (age, phone_no). ▪ Creamos composite_index_2 en (pan_no, name, age) y MySQL ha creado un índice compuesto en (pan_no, name, age, phone_no). ▪ El índice compuesto composite_index_1 ya tiene phone_no como parte de él.
  • 69. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 69 12/03/2022 ¿Qué sucede detrás de cámaras cuando definimos un índice? ▪ Entonces, sea cual sea el índice que creemos, MySQL en segundo plano crea un índice compuesto de respaldo que, a su vez, apunta a la primary key. ▪ Esto significa que la primary key es un ciudadano de primera clase en el mundo de la indexación de MySQL. También prueba que todos los índices están respaldados por una copia del primary index, pero no estoy seguro de si se comparte una sola copia del primary index o si se usan diferentes copias para diferentes índices. ▪ Hay muchos otros índices, como el Spatial index y el Full Text Search index que ofrece MySQL. Todavía no he experimentado con esos índices, por lo que no los discutiré en esta clase.
  • 70. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 70 12/03/2022 Contenido ▪ ¿Qué es un índice? ▪ Primary Key ▪ Índice Clúster (Índice primario) ▪ Índice no clúster (Índice secundario) ▪ UNIQUE Key Index ▪ Composite Index ▪ Covering Index ▪ Partial Index ▪ Detrás de cámaras ▪ Reconstrucción de índices ▪ Directrices generales de indexación
  • 71. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 71 12/03/2022 ¿Por qué volver a generar y reorganizar índices? ▪ Después de que los índices son creados, se someterán a un mantenimiento automático de parte del RDBMS cuando sea que se ejecutan operaciones insert, update o delete en los datos subyacentes. ▪ Incluso así, estas modificaciones automáticas continuamente dispersarán la información en el índice a través de la base de datos – fragmentando el índice en el tiempo.
  • 72. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 72 12/03/2022 ¿Por qué volver a generar y reorganizar índices? ▪ El resultado – los índices ahora tienen páginas donde el orden lógico (basado en el valor de clave) difiere del orden físico dentro del archivo de datos. ▪ Esto significa que hay un alto porcentaje de espacio libre en las páginas de índice, y que el RDBMS tiene que leer un número superior de páginas cuando se escanea cada índice. ▪ También, el orden de las páginas que pertenecen al mismo índice se mezcla y esto añade más trabajo al RDBMS cuando está leyendo un índice – especialmente en términos de E/S.
  • 73. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 73 12/03/2022 ¿Por qué volver a generar y reorganizar índices? ▪ El impacto de la fragmentación del Índice en algún RDBMS puede variar de una eficiencia mermada de las consultas para servidores de impacto bajo en el desempeño, al punto donde el RDBMS para completamente de usar los índices y recurre a una última solución – escaneos completos de tablas para cada consulta. ▪ Como se mencionó al inicio de esta unidad, los escaneos completos de tablas impactarán drásticamente en el desempeño de la consulta y esta es la alarma final para remediar la fragmentación de índice en cualquier RDBMS.
  • 74. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 74 12/03/2022 Ejemplo Id_Persona int (Pk) Nombre 100 Apellido 100 Dirección 200 Persona 1024 208 bytes/row 4 row/pag Idx1(nombre,apellido) Idx2(apellido,nombre) 100 bytes/row => 10 row/pag Sumatoria de los índices<= tamaño de paginas/3 Cada cierto tiempo, se debe hacer una reconstrucción de la base de datos para que no haya un desperdicio, eso se llama Revire
  • 75. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 75 12/03/2022 Reconstrucción 200000 registros 200000 registros pero Sin desperdicios(especial mente en la capa de datos) 2000 registros 200 registros Si es mas compacta, entonces existirán menos I/O 1.- se borran todos los índices 2.- se baja la tabla a un archivo 3.- se borra la tabla, el contenido 4.- se sube la tabla en forma ordenada para que el índice clúster se suba sin desperdicio
  • 76. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 76 12/03/2022 Reconstrucción en MySQL 1. Usa telnet, ssh o máquina local para conectar con el servidor MySQL y accede a la herramienta de línea de comandos de MySQL. Puedes hacer esto con mysql -p. 2. Usa el comando "CHECK TABLE nombreTabla FOR UPGRADE" para verificar que la tabla necesita ser reparada. 3. Sal de la herramienta de línea de comandos de MySQL escribiendo "x" y pulsando la tecla "Intro". Volverás a la línea de comandos de consola. 4. Elimina la tabla con el comando "mysqldump": mysqldump nombreBaseDatos nombreTabla > dump.sql. 5. Vuelve a crear la tabla en la base de datos con el comando de MySQL: mysql nombreBaseDatos< dump.sql. Esto reconstruirá la tabla y los índices de la tabla. https://techlandia.com/reconstruir-indices-mysql-como_42839/
  • 77. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 77 12/03/2022 Contenido ▪ ¿Qué es un índice? ▪ Primary Key ▪ Índice Clúster (Índice primario) ▪ Índice no clúster (Índice secundario) ▪ UNIQUE Key Index ▪ Composite Index ▪ Covering Index ▪ Partial Index ▪ Detrás de cámaras ▪ Reconstrucción de índices ▪ Directrices generales de indexación
  • 78. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 78 12/03/2022 Resumen: Índice Clúster / No clúster ⚫ Índice Clúster (Índice primario) ⚫ Un índice clúster en el atributo X coloca registros cuyos valores X están cerca uno del otro. ⚫ Índice NO Clúster(Índice secundario) ⚫ Un índice no clúster no restringe la organización de la tabla. ⚫ Puede haber varios índices no clúster por tabla. Records Records
  • 79. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 79 12/03/2022 Resumen: Restricciones(Constraints) e Índices ⚫ Primary Key, Unique ⚫ Un índice no clúster se construye sobre los atributos que componen la Primary Key con la restricción de que los valores son únicos. ⚫ Foreign Key ⚫ De forma predeterminada, no se crea ningún índice para aplicar una restricción de clave externa.
  • 80. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 80 12/03/2022 Tablas organizadas por índices ▪ Los índices clúster organizan cómo serán almacenados los datos en el disco ▪ El índice clúster y el almacenamiento pueden ser ortogonales ▪ Se puede eliminar un índice clúster, en cuyo caso la tabla se organiza como un archivo de almacenamiento dinámico ▪ Se puede definir un índice clúster en una tabla (anteriormente organizada como una heap table/tabla montón), que luego se reorganiza ▪ Tabla organizada por índices ▪ El índice clúster define la organización de la tabla. Es necesario cuando se define la tabla. No puede ser eliminado (dropped).
  • 81. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 81 12/03/2022 Dense / Sparse Index ⚫ Sparse index ⚫ Los punteros están asociados a las páginas ⚫ Dense index ⚫ Los punteros están asociados a los registros. ⚫ Los índices no clúster son densos P1 Pi P2 record record record
  • 82. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 82 12/03/2022 Conviene UTILIZAR índices... • sobre tablas medianas/grandes (ocupan gran cantidad de espacio) • para facilitar el acceso a pequeños porcentajes del total de tuplas (≤20%) seleccionadas • y para evitar... – el recorrido de la tabla completa – el acceso a tablas para consultas que incluyen un pequeño subconjunto de columnas (gracias a los índices compuestos) PERSONA(ssnum, apellido, nombre, edad, telef) CREATE INDEX idx_perso ON PERSONA(apellido, nombre) – la ordenación de las tuplas de la tabla (ORDER BY, GROUP BY, UNION, DISTINCT, JOIN, ...) – el acceso a ficheros para determinadas consultas (EXISTS, IN, ...) • Crearlos sobre columnas ... – que suelen aparecer en cláusulas WHERE, order by, ... (ordenación) – que suelen ser atributos de reunión de varias tablas (p.ej. claves ajenas) – con gran variedad de valores (mayor discriminación en las búsquedas)
  • 83. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 83 12/03/2022 Conviene EVITAR los índices... • si la tabla es muy pequeña (ocupa poco espacio) • si se degradan los requerimientos de procesamiento crítico • si el costo de su almacenamiento +mantenimiento >>>> beneficio – INSERCIÓN, MODIFICACIÓN, ELIMINACIÓN sobre tablas indexadas  mantenimiento del índice (automático, por parte del SGBD) – A veces conviene CREAR la tabla, rellenarla, y luego CREAR los ÍNDICES – Y a veces conviene (actualizaciones masivas, reorganizaciones, copias de seguridad, estadísticas): ELIMINAR ÍNDICES, realizar las MODIFICACIONES sobre la BD y CREAR de nuevo los ÍNDICES • Máximo de  4 índices por tabla. Más si rara vez es actualizada –  INDICES   necesidad de espacio +  velocidad de inserción/eliminación • Evitar crear índices sobre columnas – que son actualizadas muy a menudo – con distribución irregular de valores (selectividad: confunde al optimizador) – columnas que sólo aparezcan en cláusulas WHERE con funciones u operadores (distintos a MIN o MAX) → pueden no hacer disponible el camino de acceso
  • 84. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 84 12/03/2022 Directrices generales de indexación ▪ Dado que los índices consumen memoria adicional, decida con cuidado cuántos y qué tipo de índice serán suficientes para sus necesidades. ▪ Con las operaciones DML, los índices se actualizan, por lo que las operaciones de escritura son bastante costosas con los índices. ▪ Cuantos más índices tengas, mayor será el costo. Los índices se utilizan para acelerar las operaciones de lectura. ▪ Entonces, si tiene un sistema que escribe mucho pero no lee mucho, piense bien si necesita un índice o no. ▪ La cardinalidad es importante (cardinalidad significa el número de valores distintos en una columna). Si crea un índice en una columna que tiene baja cardinalidad, eso no será beneficioso ya que el índice debería reducir el espacio de búsqueda. La baja cardinalidad no reduce significativamente el espacio de búsqueda.
  • 85. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 85 12/03/2022 Directrices generales de indexación ▪ Ejemplo: ▪ Si crea un índice en una columna de tipo booleano (INT 1 o 0 solamente), el índice estará muy sesgado ya que la cardinalidad es menor (la cardinalidad es 2 aquí). ▪ Pero si este campo booleano se puede combinar con otras columnas para producir una alta cardinalidad, establezca ese índice cuando sea necesario. ▪ Los índices también pueden necesitar algo de mantenimiento si aún quedan datos antiguos en el índice. ▪ Deben eliminarse, de lo contrario, colapsará (hogged) la memoria, así que trate de tener un plan de monitoreo para sus índices.
  • 86. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 86 12/03/2022 Directrices generales de indexación ▪ Para finalizar, es extremadamente importante comprender los diferentes aspectos de la indexación de bases de datos. ▪ Eso te ayudará al diseñar sistemas desde su nivel más bajo. ▪ En la vida real, muchas optimizaciones de nuestras aplicaciones dependen del conocimiento de detalles tan complejos. ▪ Un índice cuidadosamente elegido seguramente le ayudará a aumentar el rendimiento de su aplicación.
  • 87. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 87 12/03/2022 Índices Unidad 6 Final de la unidad Y del curso…. !Muchas gracias a todos!