performance Database
Datos, datos y más datos, que seria del mundo sin ellos, probablemente nada. Todo sistema necesita de ser alimentado con datos, para poder devolver y hacer lo que se espera de él, pero que pasa si no se optimiza el sitio donde persisten dichos datos; el resultado un tiempo de carga terrible y lo más importante una aterradora factura.
Para solventar esto, se hizo lo siguiente:
Crear los respectivos indices:
Los indices nos permiten encontrar rápidamente el registro donde se encuentra cierta información sin tener que leer todo el contenido. Existen varios tipos de indices, siendo el UNIQUE INDEX el usado para la restricción de unicidad y el otro enfocado en el rendimiento. Sin embargo, un indice implica mayor costo en disco y mayor coste a la hora de hacer tareas de escritura.
La lista de los indices que se crearón son:
- CREATE INDEX
fecha_paginarCarroONcarroCompra(created_at_timestamp);—> statement-breakpoint - CREATE INDEX
fecha_mostrarCarroONcarroCompra(fechaCreacion);—> statement-breakpoint - CREATE INDEX
category_idxONCategoria(nombre);—> statement-breakpoint - CREATE INDEX
color_idxONColorProducto(nombreColor);—> statement-breakpoint - CREATE INDEX
talla_idxDetallesONdetallesCarro(numeroTalla);—> statement-breakpoint - CREATE INDEX
color_idxDetallesONdetallesCarro(color);—> statement-breakpoint - CREATE INDEX
estado_idxCarroONestadoCarro(nombre);—> statement-breakpoint - CREATE INDEX
estado_idxProductONestadoProducto(nombre);—> statement-breakpoint - CREATE INDEX
estado_idxTallasONestadoTalla(nombre);—> statement-breakpoint - CREATE INDEX
producto_id_idxImageONImagen(productId);—> statement-breakpoint - CREATE INDEX
marca_idxONMarca(nombre);—> statement-breakpoint - CREATE INDEX
nombreProduct_idxONProducto(nombre);—> statement-breakpoint - CREATE INDEX
fecha_idxCreadoONProducto(fechaCreacion);—> statement-breakpoint - CREATE INDEX
fechaCambio_idxProductONProducto(ultimoCambio);—> statement-breakpoint - CREATE INDEX
fecha_paginar_idxProductONProducto(created_at_timestamp);—> statement-breakpoint - CREATE INDEX
talla_idxONTalla(numeroTalla);—> statement-breakpoint - CREATE INDEX
user_id_idxONuserStatusHistory(userId);—> statement-breakpoint - CREATE INDEX
razon_cambio_idxONuserStatusHistory(razon);—> statement-breakpoint - CREATE INDEX
fecha_paginar_idxStatusONuserStatusHistory(created_at_timestamp);—> statement-breakpoint - CREATE INDEX
fechaRegistroUserONuserStatusHistory(fechaCambio);—> statement-breakpoint - CREATE INDEX
rol_idxUserONUsuario(rolActual);—> statement-breakpoint - CREATE INDEX
email_idxCorreoONUsuario(correo);—> statement-breakpoint - CREATE INDEX
phone_idxUserONUsuario(telefono);—> statement-breakpoint - CREATE INDEX
fechaRegistroUsuarioONUsuario(fechaCreacion);—> statement-breakpoint - CREATE INDEX
fecha_paginar_idxUserONUsuario(created_at_timestamp);—> statement-breakpoint - CREATE INDEX
metodoPagoONVenta(formaPago);—> statement-breakpoint - CREATE INDEX
fechaCompraVentaONVenta(fechaVenta);—> statement-breakpoint - CREATE INDEX
fecha_paginar_idxVentaONVenta(created_at_timestamp);
Optimizar al máximo las consultas:
No se debe usar bajo ninguna circunstancia el select * from. Se debe obtener solo los datos que vamos a necesitar, llamar a una gran cantidad de datos y no usarlos es dispararse en el pie.
Teniendo en cuenta esto, se puede decir que una buena consulta debe devolver solo los datos que se van a emplear, para esto es vital saber el lenguaje SQL y conocer las funciones que aporta el motor elegido.
Paginar los resultados en la base de datos:
Paginar es una técnica usada para dividir grandes conjuntos de datos en partes más pequeñas y manejables, llamadas “páginas”. Hay dos métodos principales de paginación: paginación basada en límit/offset y paginación basada en cursor.
Nuestra idea era aplicar la paginación basada en cursor desde el principio como se muestra en paginar con cursor. Sin embargo, dado que es necesario permitirle al usuario ir de una página a otra y de retroceder si quiere, se optó por usar la forma tradicional que es el offset/limit, pero con su variante como se ve en: paginar con offset.