Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

UT6-Optimización de Consultas MySQL GBD

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 22

UT6 – Optimización de

consultas
SISTEMAS GESTORES DE BASES DE DATOS
Introducción
Ante problemas de rendimiento del servidor es necesario:
◦ Identificar el/los problemas.
◦ Intentar solucionarlos.

No siempre el problema se va a deber al Sistema Gestor de Bases de Datos.


A continuación veremos cómo:
◦ Optimizar la configuración del servidor.
◦ Optimización de comandos SQL.
Índices
Estructura de datos que mejora la velocidad de las
operaciones.
Evita tener que recorrer todos los registros de la tabla
cuando se responde a una consulta
Se crean sobre campos que suelen ser muy utilizados en
consultas
◦ Toda clave primaria tiene un índice asociado

Aumentan el espacio de almacenamiento necesario pero


permiten ahorrar tiempo
Índices
Para crear un índice:
◦ ALTER TABLE nombreTabla ADD INDEX (campoÍndice1,campoÍndice2…);

◦ Es posible crear índices parciales en campos muy grandes especificando el número de caracteres del
campo que se indexarán.
Índices
Creación de índices - Sintaxis
Indicando:
◦ Tipo de índice entre UNIQUE, FULLTEXT o SPATIAL (VER
SIGUIENTE
◦ Index_name: Nombre del índice
◦ Index_type: btree/hash
◦ Dependiendo del motor de almacenamiento pueden no estar
disponibles los dos tipos
◦ InnoDB solo btree
◦ Index_col_name: Nombre de la columna sobre la que
se crea el índice, longitud y orden de almacenamiento
Tipos de índices en MySQL
UNIQUE
PRIMARY
FULLTEXT
◦ Utilizados para la búsqueda de caracteres dentro de campos de texto
◦ Solo para tablas de tipo MyISAM
◦ En campos de tipo CHAR, VARCHAR y TEXT
◦ Se busca mediante el comando MATCH (col1, col2, ….) AGAINST (expresión)

SPATIAL
◦ Índices usados para datos de tipo espacial como LINE o CURVE
Estructura de índices btree vs hash
Índice btree
◦ Muy rápido a la hora de buscar valores
◦ Especialmente recomendados para consultas basadas en rangos de datos.
◦ P.e: BETWEEEN, >, <, ….
Estructura de índices btree vs hash
Índice HASH
◦ Basados en una función que mapea la clave y asigna a
cada registro una posición en el disco.
◦ Esa posición deberá ser menor que el máximo de espacio
de almacenamiento.
◦ Más rápido que btree
◦ Posibilidad de colisiones
◦ Dos registros de origen reciben la asignación del mismo hueco en disco.
◦ Lento para consultas de rangos de valores.
Ver un índice
Comando SHOW INDEX

Más sobre SHOW INDEX


Eliminar un índice
Podemos usar el comando DROP INDEX

También es posible añadir y borrar índices mediante el comando ALTER TABLE


◦ ALTER TABLE jugadores ADD INDEX equipo USING BTREE
◦ ALTER TABLE JUGADORES DROP INDEX indice1
OPTIMIZACIÓN EN
MYSQL
Optimización en el diseño
Además de realizar un diseño óptimo es necesario:
◦ Minimizar el espacio en disco. A más espacio mayor lentitud en los accesos.
◦ Utilizar los tipos de datos mas pequeños en función de lo que el campo requiere.
◦ Utilizar NOT NULL siempre que sea posible ya que evita comprobaciones en consultas.
◦ El índice correspondiente a la clave primaria debe ser lo más pequeño posible.
◦ No crear demasiados índices, aceleran las consultas pero ralentizan las actualizaciones.
◦ Dividir las tablas cuando sea necesario:
◦ Verticalmente u horizontalmente.
Procesamiento de consultas
Caché de consultas
◦ Cualquier consulta SELECT es previamente cacheada en el servidor.
◦ Depende del valor de la variable query_cache_type
◦ OFF – Valor a 0 – Las consultas no se cachean
◦ ON – Valor a 1 – Las consultas se cachean
◦ DEMAND – Valor a 2 – Solo se ejecutan las consultas con la opción SQL_CACHE

◦ Solo interesa que sean cacheadas las consultas que se repiten con frecuencia
Optimización de consultas
Es fundamental crear índices sobre los campos más consultados o utilizados en las consultas
Las consultas que funcionan solamente sobre índices son mucho más rápidas
Para optimizar las consultas podemos usar el comando EXPLAIN
◦ Nos muestra información sobre cómo se realizará una consulta
◦ Usada de la manera más simple (Sin incoporar una select) es similar al comando DESC
Optimización de consultas
Comando EXPLAIN
Optimización de consultas
Comando EXPLAIN
◦ Id. Identificador de tabla en la consulta
◦ Select_type. (SIMPLE/UNION/DEPENDANT UNION/UNION RESULT/SUBQUERY….)
◦ Table. Nombre de la tabla de la que se sacan los registros.
◦ Type. Tipo de valores que se usan en la consulta, por ejemplo index para índices.
◦ Possible_keys. Posibles índices que se usan para la consulta.
◦ Key. Nombre del índice elegido para la consulta.
◦ Ref. Columnas o valores que se usan para hacer coincidir con la clave.
◦ Eq_ref. Se utiliza cuando la consulta aplica el índice primario de la tabla.
◦ Rows. Estimación de filas a examinar antes de resultados.
◦ Extra. Información adicional como el uso de ciertas claúsulas.
Optimización de consultas
Cuando las tablas son pequeñas es posible que MySQL decida no usar índices.
Podemos forzar a usar un índice con la claúsula FORCE INDEX después del FROM
Optimización de consultas
Consultas de INSERCIÓN, ACTUALIZACIÓN Y BORRADO
◦ Este tipo de consultas requieren, además de actualizar la tabla, actualizar los índices por lo que pueden
ser más costosas.

Es recomendable:
◦ Usar comandos INSERT con valores múltiples.
◦ Realizar inserciones masivas con LOAD DATA INFILE.
◦ En las cláusulas UPDATE Y DELETE hay que tener en cuenta que la cláusula WHERE afecta del mismo
sentido que una sentencia SELECT
◦ A mayor número de índices mayor lentitud en este tipo de sentencias.
◦ Es fundamental aumentar el tamaño de la variable de servidor key_buffer_size que define el tamaño del
buffer de índices.
◦ Dependerá de las características de nuestra máquina.
Mantenimiento de tablas
ANALYZE TABLE
◦ Analiza y almacena la distribución de claves de una tabla.
◦ Muy útil tras cargar una gran cantidad de datos para que se actualice el índice.
◦ Se escribe en el registro binario para que se replique en los esclavos de replicación.
Mantenimiento de tablas
OPTIMIZE TABLE
◦ Optimiza la tabla después de que hagamos hecho una gran cantidad de borrados y actualizaciones
sobre los datos de la tabla.
◦ Se reutiliza el espacio y desfragmenta la tabla en disco.

CHECK TABLE
◦ Revisa las tablas para buscar posibles errores
◦ Si el mensaje obtenido no es ok o Table up to date es posible que la tabla requiera reparación (mediante
el comando REPAIR en tablas MyISAM y ARCHIVE)

CHECKSUM TABLE
◦ Genera un hash de la tabla que nos permite comprobar que no se hayan producido modificaciones en
los datos
Control del optimizador
El SGBD posee un optimizador de consultas, en el caso de MySQL posee dos variables de
servidor que nos permiten configurarlo.
◦ Optimizer_prune_level. Para restringir el número de posibilidades a estudiar para optimizar la consulta.
◦ Valor 1 – Por defecto.
◦ Valor 0 – Deshabilitado. Se analiza la sentencia de manera exhaustiva.
◦ Optimizer_search_depth. Restringe el nivel de detalle a efectos de optimizar la consulta. A mayor
profundidad mejor plan pero más tiempo para obtenerlo. Valores entre 0 y 62. Por defecto 62.

También podría gustarte