Hola Amigos:
Es un placer siempre saber como están y como siempre aprovechando de sus conocimiento avanzados me encargo de sacar provecho del mismo:
Tengo esta consulta la cual en mi db en Firebird 2.5.7.27050 de Desarrollo con diferencia de 150 mil registros a la de producción noto de no es el mismo rendimiento a pesar que ya se realizaron los indexados correcto en cada tabla aquí mostrada no veo porque la direrencia en hacer la misma consulta en tiempo de traer los datos es significativamente amplio una de la otra:
Código:
Base de Datos de producción
Prepare : 16 ms
Execute : 0 ms
Avg fetch time: 0 ms
Memory Usage
------------------------------------------------
Current: 1.11 MB
Max : 1.12 MB
Buffers: 75
Database Operations
------------------------------------------------
Reads : 63417
Writes : 4
Fetches: 15903532
Plan:
------------------------------------------------
PLAN SORT (JOIN (FAC_CAJA NATURAL, CAJAS INDEX (RDB$PRIMARY77), FACTURAS_VENTAS INDEX (RDB$PRIMARY45), FAC_CLIENTE INDEX (IDX_FAC_CLIENTE), CLIENTES INDEX (RDB$PRIMARY85)))
Table Operations:
+--------------------------+-----------+-----------+-----------+-----------+-----------+
| Table Name | Index | Non-Index | Updates | Deletes | Inserts |
| | reads | reads | | | |
+--------------------------+-----------+-----------+-----------+-----------+-----------+
| FAC_CAJA| 0 | 1,321,933 | 0 | 0 | 0 |
| FACTURAS_VENTAS| 1,321,933 | 0 | 0 | 0 | 0 |
| FAC_CLIENTE| 52 | 0 | 0 | 0 | 0 |
| CAJAS| 1,321,933 | 0 | 0 | 0 | 0 |
| CLIENTES| 52 | 0 | 0 | 0 | 0 |
+--------------------------+-----------+-----------+-----------+-----------+-----------+
ahora base de datos producción
Código:
Query Performance
------------------------------------------------
Prepare : 0 ms
Execute : 0 ms
Avg fetch time: 0 ms
Memory Usage
------------------------------------------------
Current: 98.30 MB
Max : 98.31 MB
Buffers: 2048
Database Operations
------------------------------------------------
Reads : 9495
Writes : 4
Fetches: 5132412
Plan:
------------------------------------------------
PLAN SORT (JOIN (FACTURAS_VENTAS NATURAL, FAC_CLIENTE INDEX (IDX_FAC_CLIENTE), CLIENTES INDEX (RDB$PRIMARY85), FAC_CAJA INDEX (IDX_FAC_CAJA), CAJAS INDEX (RDB$PRIMARY77)))
Table Operations:
+--------------------------+-----------+-----------+-----------+-----------+-----------+
| Table Name | Index | Non-Index | Updates | Deletes | Inserts |
| | reads | reads | | | |
+--------------------------+-----------+-----------+-----------+-----------+-----------+
| FACTURAS_VENTAS| 0 | 1,287,862 | 0 | 0 | 0 |
| FAC_CAJA| 140,898 | 0 | 0 | 0 | 0 |
| FAC_CLIENTE| 140,898 | 0 | 0 | 0 | 0 |
| CAJAS| 140,898 | 0 | 0 | 0 | 0 |
| CLIENTES| 140,898 | 0 | 0 | 0 | 0 |
+--------------------------+-----------+-----------+-----------+-----------+-----------+
esta es la consulta
Código SQL
[-]
select
CAST(FACTURAS_VENTAS.FECHA AS DATE) AS FECHA_COMPRA,
CLIENTES.ID_CLIENTE,
CLIENTES.NOMBRE_1 ||' '|| CLIENTES.NOMBRE_2 ||' '|| CLIENTES.APELLIDO_1||' '|| CLIENTES.APELLIDO_2 AS CLIENTE_NOMBRE,
CLIENTES.CEDULA,
CLIENTES.CELULAR,
CLIENTES.TELEFONO,
CLIENTES.DIRECCION,
CLIENTES.EMAIL,
CAJAS.NUM_CAJA,
FACTURAS_VENTAS.CONSECUTIVO AS NUM_REGISTRO,
FACTURAS_VENTAS.MONTOIMPUESTO,
FACTURAS_VENTAS.MONTOSUBTOTAL,
FACTURAS_VENTAS.MONTODESCUENTO,
FACTURAS_VENTAS.MONTOSUBTOTALCONDESC,
FACTURAS_VENTAS.MONTOTOTAL,
FACTURAS_VENTAS.NUM_CUPONIMPRESORA,
FACTURAS_VENTAS.ID_FACTURA
FROM FAC_CLIENTE
INNER JOIN CLIENTES ON FAC_CLIENTE.ID_CLIENTE = CLIENTES.ID_CLIENTE
INNER JOIN FACTURAS_VENTAS ON FAC_CLIENTE.ID_FACTURA = FACTURAS_VENTAS.ID_FACTURA
INNER JOIN FAC_CAJA ON FACTURAS_VENTAS.ID_FACTURA = FAC_CAJA.ID_FACTURA
INNER JOIN CAJAS ON CAJAS.ID_CAJA = FAC_CAJA.ID_CAJA
WHERE CAST(FACTURAS_VENTAS.FECHA AS DATE) BETWEEN :FECHAINI AND :FECHAFIN
ORDER BY FAC_CLIENTE.ID_FACTURA DESCENDING
otra parte interesante es que porque firebird me muestra las bases de datos diferente plan sort ejemplo:
Código:
db de produccion:
PLAN SORT (JOIN (FAC_CAJA NATURAL, CAJAS INDEX (RDB$PRIMARY77), FACTURAS_VENTAS INDEX (RDB$PRIMARY45), FAC_CLIENTE INDEX (IDX_FAC_CLIENTE), CLIENTES INDEX (RDB$PRIMARY85)))
db de desarrollo
PLAN SORT (JOIN (FACTURAS_VENTAS NATURAL, FAC_CLIENTE INDEX (IDX_FAC_CLIENTE), CLIENTES INDEX (RDB$PRIMARY85), FAC_CAJA INDEX (IDX_FAC_CAJA), CAJAS INDEX (RDB$PRIMARY77)))
¿Podrían sacarme de la duda?
saludos cordial;
novato_erick