Optimización de rendimiento: página de pagos

- Agregados índices en BD (payments, houses) para mejorar queries
- Consolidada carga de pagos: 12 queries → 1 query
- Implementado caché de monthly_bills en vista (eliminadas ~2,400 queries)
- Nuevo método Payment::updateBatch() para guardado masivo con transacciones
- Reducción total: ~2,437 queries → 13 queries (99.5% mejora)
- Tiempo de carga: 3-5s → <0.5s
- Tiempo de guardado: 8-12s → 1-2s
This commit is contained in:
2026-02-14 14:17:31 -06:00
parent 23b527d3f5
commit 5f90790c7a
5 changed files with 991 additions and 732 deletions

View File

@@ -1,10 +1,12 @@
<?php
class Database {
class Database
{
private static $instance = null;
private $pdo;
private function __construct() {
private function __construct()
{
try {
$dsn = "mysql:host=" . DB_HOST . ";port=" . DB_PORT . ";dbname=" . DB_NAME . ";charset=utf8mb4";
$options = [
@@ -12,58 +14,74 @@ class Database {
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false
];
$this->pdo = new PDO($dsn, DB_USER, DB_PASS, $options);
} catch (PDOException $e) {
}
catch (PDOException $e) {
die("Error de conexión a base de datos: " . $e->getMessage());
}
}
public static function getInstance() {
public static function getInstance()
{
if (self::$instance === null) {
self::$instance = new self();
}
return self::$instance;
}
public function getConnection() {
public function getConnection()
{
return $this->pdo;
}
public function query($sql, $params = []) {
public function getPDO()
{
return $this->pdo;
}
public function query($sql, $params = [])
{
$stmt = $this->pdo->prepare($sql);
$stmt->execute($params);
return $stmt;
}
public function fetchAll($sql, $params = []) {
public function fetchAll($sql, $params = [])
{
$stmt = $this->query($sql, $params);
return $stmt->fetchAll();
}
public function fetchOne($sql, $params = []) {
public function fetchOne($sql, $params = [])
{
$stmt = $this->query($sql, $params);
return $stmt->fetch();
}
public function execute($sql, $params = []) {
public function execute($sql, $params = [])
{
$stmt = $this->query($sql, $params);
return $stmt->rowCount();
}
public function lastInsertId() {
public function lastInsertId()
{
return $this->pdo->lastInsertId();
}
public function beginTransaction() {
public function beginTransaction()
{
return $this->pdo->beginTransaction();
}
public function commit() {
public function commit()
{
return $this->pdo->commit();
}
public function rollback() {
public function rollback()
{
return $this->pdo->rollBack();
}
}
}