Ver Mensaje Individual
  #1  
Antiguo 21-11-2019
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Reputación: 14
novato_erick Va por buen camino
Optimizando Consulta

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
Responder Con Cita