Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-11-2019
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 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
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Consulta update desde una consulta select jafera SQL 3 08-05-2015 19:56:02
Consulta SQL basada en otra consulta anterior jafera SQL 5 19-11-2013 01:07:37
Optimizando velocidad de mis páginas lucasarts_18 PHP 2 25-09-2008 19:42:47
Optimizando Creación de Formularios MDI nelostanley OOP 20 08-01-2008 03:00:36
Realizar una consulta sobre los registros que devuelve otra consulta Borjaserrano Firebird e Interbase 12 01-10-2007 23:19:44


La franja horaria es GMT +2. Ahora son las 09:07:02.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi