Tema 5 - WordPress.com

Anuncio
Administración de Sistemas Gestores de Bases de Datos
Tema 5. Optimización y monitorización
Profesor: Juan Ignacio Contreras1
Índice del tema
Índices, definición y tipos
Optimización SQL
Diseño
Consultas
Otras instrucciones
Optimización del servidor
Almacenamiento y motores
Memoria
Rendimiento
2
Índices
- Estructuras de datos o ficheros que aceleran el acceso a los datos en las tablas
de nuestras bases de datos
- Contienen el valor de una fila y su dirección física en disco.
- Se crean sobre campos que suelen ser muy utilizados en consultas.
- Normalmente se crean sobre campos clave o parte de una clave primaria o
secundaria.
SELECT * FROM movimientos WHERE código_cuenta=2324
- Sacrificamos algo de espacio a costa de ahorrar CPU en el procesamiento de
consultas.
3
Tipos de índices
- Parciales: El interés de un índice parcial reside en la ganancia de velocidad.
Un índice corto es mucho más rápido. Y podemos suponer que los 10
primeros caracteres del nombre son lo suficiente representativos.
- Multicolumna: El valor del índice se obtiene concatenando los valores de los
diferentes campos que componen el índice. MySQL solo permite un índice
por tabla y consulta.
- Secundarios: En InnoDB, las entradas en índices no agrupados (también
llamados índices secundarios) contienen el valor de clave primaria de la fila.
InnoDB utiliza este valor de clave primaria para buscar la fila a partir del
índice agrupado. Nótese que si la clave primaria es larga, los índices
secundarios utilizan más espacio.
- Cluster: Cada tabla InnoDB tiene un índice especial llamado índice
agrupado (clustered index) donde se almacenan los datos de las filas. Si se
define una PRIMARY KEY en una tabla, el índice de la clave primaria es el
índice agrupado.
-
4
Estructura de un índice
- B-tree: Índice con estructura de árbol, muy utilizado por su flexibilidad,
rendimiento y ahorro de espacio. Además de agilizar las consultas directas
por los campos indexados, también agilizan las consultas por rango
(BETWEEN) y por comparadores (<, >, >=, <=). MySQL utiliza índices B-Tree
en los motores MyISAM e InnoDB. En el caso de InnoDB, el índice está
“incrustado”, es decir, que se almacena junto a los datos (y no en un fichero
separado como en MyISAM).
- Hash: Índice basado en algoritmos de hash que garantiza (casi siempre) la
dispersión de valores de la clave. Así se evita que en un rango de valores de
índice se acumulen la mayoría de los resultados, como puede suceder en los
B-Tree (por ejemplo, que la mayoría de teléfonos se acumulen en las
entradas de índice que empiezan por 91 y 93). El algoritmo de hash hace
que valores del índice muy similares se indexen separados.
- R-tree: Son índices utilizados para datos espaciales y multidimensionales.
Permiten localizar rápidamente puntos contenidos en diferentes tipos de
áreas.
5
Índices en tablas MyISAM
Las tablas MyISAM utilizan índices B-Tree, full-text y R-Tree. No pueden
utilizar índices hash. Además, tienen algunas características para mejorar el
rendimiento de los índices B-Tree. Compresión de prefijos en claves
alfanuméricas. También llamado compresión de prefijos”. Si varias entradas
de la columna indexada tienen el mismo prefijo (por ejemplo “http://”) este
será comprimido para ahorrar espacio de almacenamiento. Compresión de
bytes altos en claves numéricas. También llamado “empaquetamiento de
claves”. Es la misma idea que con las claves alfanuméricas, pero aplicada al
byte alto de las claves numéricas. Los índices de las tablas MyISAM se
guardan los ficheros con el mismo nombre que la tabla y extensión .MYI.
MySQL tiene la opción de posponer las actualizaciones del índice de una
tabla para cargas masivas de datos.
6
Índices en tablas InnoDB
Las tablas InnoDB utilizan índices B-Tree incrustados. Esto las hace muy
rápidas en las búsquedas por clave primaria. Además, al tratarse del índice,
es frecuente que la página con la clave y los datos ya se encuentre en la
caché de disco. Todos los índices en InnoDB son árboles binarios (B-trees)
donde las entradas de índice se almacenan en páginas que son las hojas del
árbol.
7
Índices en tablas MEMORY (HEAP)
El motor de almacenamiento MEMORY crea tablas con contenidos que se
almacenan en memoria.Éstas se conocían préviamente como HEAP . En MySQL
5.0, MEMORY es el término preferido, aunque HEAP se soporta para
compatibilidad con versiones anteriores.
Cada tabla MEMORY está asociada con un fichero de disco. El nombre de
fichero comienza con el nombre de la tabla y tiene una exensión de .frm para
indicar que almacena la definición de la tabla.
Como indica su nombre, las tablas MEMORY se almacenan en memoria y usan
índices hash por defecto. Esto las hace muy rápidas, y muy útiles para crear
tablas temporales. Sin embargo, cuando se apaga el servidor, todos los datos
almacenados en las tablas MEMORY se pierden. Las tablas por sí mismas
continúan existiendo ya que sus definiciones se almacenan en ficheros .frm en
disco, pero están vacías cuando reinicia el servidor.
8
Índices en tablas BDB
En MySQL 5.0, las tablas BDB pueden tener hasta 31 índices por tabla, 16
columnas por índice, y un máximo de tamaño de clave de 1024 bytes.
MySQL necesita una PRIMARY KEY en cada tabla BDB para que cada registro
pueda identificarse unívocamente. Si no crea una explícitamente, MySQL crea y
mantiene una PRIMARY KEY oculta. La clave oculta tiene una longitud de 5
bytes y se incrementa para cada intento de inserción.
La PRIMARY KEY es más rápida que cualquier otro índice, ya que la PRIMARY
KEY se almacena junto con los datos. Los otros índices se almacenan como los
datos claves + la PRIMARY KEY, por lo que es importante mantener la PRIMARY
KEY tan pequeña como sea posible para ahorrar espacio en disco y tener más
velocidad.
9
Descargar