Documente Academic
Documente Profesional
Documente Cultură
Cómo optimizar una base de datos mediante el Asistente para la optimización de motor
de base de datos
La optimización del acceso a los datos es vital para el tiempo de carga d e la página,
d e b id o a q u e su ele ser el factor q u e m á s afecta al t i e mp o q u e tiene q u e esp erar el
navegador para recibir el HT ML . Este tiempo de espera es mu y importante, ya que el
resto de recursos de la página (imágenes, scripts y hojas de estilo), no se empiezan a
bajar hasta que el navegador no lee el H T M L desde el que se hace referencia a estos
recursos.
Este tipo de optimización es probablemente la más compleja de todas, en primer lugar
porque depende de dos factores variables en el tiempo: por un lado, de cómo y de qué
tipo son las consultas que se van a realizar y, por otro, de la carga de trabajo que tenga
q u e s o p o r t a r el s e r v i d o r o s erv i d o r es . E n s e g u n d o l u g a r p o r la g r a n c a n t i d a d d e
conocimientos que hay que tener para saber reescribir consultas, reescribir el código
que ejecuta las consultas, crear índices, vistas materializadas, particiones horizontales
y verticales, réplicas, tablas d e a p o y o , sab er elegir los tipos d e dato s a usar, sab er
optimizar el e s q u e m a sin p erd er la lógica del m o d e l o d e negocio, sab er ajustar los
p a r á me t r o s d e c o n fi g u r a c i ó n d e l S G B D , c o n o c e r y sa b e r u sar s i s t e ma s d e c a c h é
externos. Además cada uno de estos puntos, de los que hay muchos libros escritos, se
debe abordar de forma distinta dependiendo de qué SGBD
Puede utilizar la GUI (interfaz gráfica de usuario) del Asistente para la optimización de
motor d e base d e datos para optimizar bases d e datos mediante tablas o archivos d e
carga de trabajo. La GUI del Asistente para la optimización de motor de base de datos le
p er mi te v er c o n facilidad lo s resu ltado s d e la sesió n d e o p t i mi za c ió n actu al y los
resultados d e sesiones anteriores. Para obtener más información,
o p t i mi z a c i ó n y p re g u n t a al u su ar io si d e s e a q u e el Asisten te p a r a la
optimización d e motor d e base de datos genere recomendaciones
basadas en el análisis realizado hasta este punto.
o Detener análisis detiene la sesión de optimización sin generar ninguna
recomendación.
Optimización de consultas
Cambiar los O R por IN, cuando tenemos más de un valor para comparar.
Minimizar el coste de los JOIN: La concatenación natural o JOIN es la operación más
costosa de las bases de datos relaciones, ya que requiere realizar una
multiplicación cartesiana y una selección de valores. Algunas técnicas que podemos
usar para minimizar su efecto consisten en:
Reordenarlos para concatenar primero las relaciones con menos filas para
reducir el número de cruces.
Crear subconsultas en donde se filtren o limiten el número de filas de las
relaciones grandes antes de realizar los siguientes JOINs.
A veces, dividir una consulta en varias, es mejor que hacerlo todo con una sola
consulta, de forma que podemos obtener en una primera consulta unos pocos
identificadores que podemos pasar con un IN a la siguiente consulta, en lugar de
realizar un JOIN.
Cambiar los JOIN por EXISTS si no se va a mostrar ningún dato de la relación con
la que se realiza el cruce.
Tener en cuenta el problema del N + 1: El n+1 se produce normalmente cuando
tenemos un listado en el que para mostrarlo como queremos, por cada ítem
necesitamos realizar una consulta adicional (el más uno del n+1). En este caso,
suele ser mejor realizar uno o varios JOIN adicionales, en la consulta que recupera
el listado de ítems. De esta forma obtenemos el listado tal y como lo necesitamos, y
no se tienen que lanzar consultas adicionales para cada ítem.
Especificar siempre los nombres de las columnas en las SELECT, si no el SGBD leerá
todas las filas del disco. El asterisco se debe usar sí y solo sí se utiliza COUNT, en
cuyo caso el SGBD sabrá que no tiene que leer todas las columnas.
Crear índices: los índices permiten un acceso a los datos no secuencial mucho más
rápido, pero son costosos de crear, así que no es conveniente su uso si tenemos
muchas más lecturas que escrituras. Debemos analizar el plan de ejecución de las
consultas (cada SGB D tiene su manera de verlo) para saber donde debemos crear
índices.
Normalmente, crearemos los índices en claves ajenas y en las columnas que se usen
con ORDER BY o WHERE. Si se crean índices compuestos, se deben poner las
columnas en el mismo orden que se vayan a usar en las consultas
Optimizar la paginación
La paginación suele ser una tarea costosa cuando tenemos que mostrar varios números
de página, porque para eso se tiene que calcular el número de filas en la relación, lo que
puede requerir un a lectura completa d e la misma, dependiendo del S G B D . Siempre
será más eficiente mostrar enlaces de anterior y siguiente, recuperando todas las filas
a mostrar y una más, de manera q u e se muestra el enlace de siguiente página, si nos
llega esta fila adicional d esd e la B D . Alternativamen te, p o d e mo s man ten er e n u n a
relación independiente el número de filas.
Otra cosa que puede afectar a las paginaciones, es que cuando estamos en una página
interior s e d e b e n d escartar u n cierto n ú m e r o d e filas, p erten ecien tes a las p ág in as
anteriores, y q u e s o n leídas d el d isco c o n to das las c o l u mn a s q u e ap ar ez c an e n la
consulta. Una forma de evitar esto es realizar un JOIN con una subconsulta que recupere
lo s i d en t i fi cad o r es q u e n e c e s i t a m o s a n t e s d e leer t o d a la i n fo r m a c i ó n . E j e m p l o :
SELECT dato1, dato2, dato3 FROM Foo INNER JOIN( SELECT id FROM Foo ORDER BY
dato1 LIMIT 50,10) AS FooPaginado USING(id)