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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-09-2015
nuxbaster nuxbaster is offline
Miembro
NULL
 
Registrado: dic 2010
Posts: 13
Poder: 0
nuxbaster Va por buen camino
Optimización de consulta

Buenas noches:
El motivo de mi hilo es para solicitar de su apoyo en la optimización de esta consulta que
Código SQL [-]
SELECT
A.*, A.IMPORTE_NETO+A.IMPORTE_DONATIVO+A.TOTAL_IMPUESTOS AS IMPORTE_TOTAL
,
B.NOMBRE AS CAJA
FROM
DOCTOS_PV A
LEFT JOIN CAJAS B
ON A.CAJA_ID = B.CAJA_ID
WHERE ((A.TIPO_DOCTO='V'))
ORDER BY A.FOLIO

Ya que actualmente me tarda en mostrar los registros en un tiempo de 1 minuto 30 segundos estamos hablando de 4 millones 162 mil registros, el servidor es un IBM de 8 GB con procesador Intel Xeon E3 1220 v3 a 3.10 GHZ el firebird es Firebird-2.5.4.26856_0_x64 modo classic ya intente configurando el firebird.conf pero ya me duele la cabeza llevo todo el día pegado a la PC, espero ustedes tengan algún comentario
Gracias!!
Responder Con Cita
  #2  
Antiguo 21-09-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
El firebird.conf no necesitas modificarlo para nada.
Lo que necesitas es que los campos implicados en consulta (where, and, or, etc.) tengan su índice o sean claves.
Mira el plan usado y optimiza la consulta según lo que indique.
Para ayudarte necesitamos la estructura de la base de datos, cosa que no has dicho.
Responder Con Cita
  #3  
Antiguo 21-09-2015
Toni Toni is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona - España
Posts: 364
Poder: 22
Toni Va por buen camino
Hola,

Aunque el volumen de datos es importante la consulta es bastante sencilla por lo que haciendo lo que te indica Casimiro tiene mejorar muchisimo. Empieza por ahi.
__________________
Saludos,

Bitman
Responder Con Cita
  #4  
Antiguo 22-09-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Yo creo que tenes un problema "grave" aca

Código Delphi [-]
WHERE ((A.TIPO_DOCTO='V'))

Pensando desde Delphi, porque tendrias un caracter (o string, peor aun) para diferenciar entre un "tipo de algo"

Lo mas natural seria usar un enumerativo. Y los enumerativos son tipos de datos numericos (byte, word, integer, etc). Y las operaciones con tipos de datos numericos son mucho mas rapidas que con strings o carácteres
Responder Con Cita
  #5  
Antiguo 22-09-2015
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Si no sabes interpretar el plan, como yo digo siempore, divide y vencerás.

Así sabrás dónde se va el tiempo.

1.- quita todas las condiciones del where y mide el tiempo.
2.- Si ha mejorado, incluye una condición, y vuelve a medir.
3.- Así hasta que veas dónde está el cuello de botella y al menos sepas dónde mirar.

Ese left join no me gusta nada....

Necesitas los 4 M de registros? Puedes poner otra condición que limite los registros involucrados como una fecha por ejemplo ?

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #6  
Antiguo 22-09-2015
nuxbaster nuxbaster is offline
Miembro
NULL
 
Registrado: dic 2010
Posts: 13
Poder: 0
nuxbaster Va por buen camino
Gracias por su respuestas, como lo indicaron fui dividiendo la consulta hasta que me percate que tarda al ordenar (ORDER BY A.FOLIO) dicho campo es un char (Ejem. 'B000000010, B000000011..... n) lastimosamente esta consulta viene dentro un sistema llamado Microsip y por ende no puedo modificarlo, pero si puedo mandar un reporte ya que esta afectando la operación de la empresa donde laboro (Tiendas de abarrotes tipo Chedrahui, Soriana), si existe forma de optimizar el order by para darle un poco de agilidad me gustaría me comentaran, otra de las cosas que se me ocurrió en base a sus comentarios es sugerir la separación del campo Folio 'B000000010' serie char B integer 10 ya que como estamos hablando de ventas de mostrador pueden tener diferente serie pero el entero se puede repetir ejemplo A1, B1, C1
Responder Con Cita
  #7  
Antiguo 22-09-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Crea un índice para ese campo.
Responder Con Cita
  #8  
Antiguo 23-09-2015
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Crea un índice para ese campo.
Sería la solución.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #9  
Antiguo 23-09-2015
nuxbaster nuxbaster is offline
Miembro
NULL
 
Registrado: dic 2010
Posts: 13
Poder: 0
nuxbaster Va por buen camino
Estimados compañeros:

Quiero agradecer su apoyo a mi consulta, este escrito es para informarles acerca de la solución (de lentitud) durante mi investigación y con la infinita ayuda de cada uno de ustedes he logrado entender cosas que antes no y es por eso que si algún día andan en México les tendré un six y un rico consome de barbacoa ....

Gracias a todos los que se tomaron un poco de su valioso tiempo, mi consulta inicialmente tardaba 1 minuto 15 segundos (4 millones 162 mil registros) y con las correcciones sugeridas (Gracias Casimiro: Crear un indice en el campo utilizado por order by). La consulta da esa sensación de rapidez tardando únicamente de 4 a 6 Segundos.

No me queda más que dar por cerrado este tema.

PD. Saber que ustedes lo hacen posible es lo mejor (Los de soporte del sistema su solución fue haga su respaldo y empieza con una base de datos en blanco)

Gracias,
Responder Con Cita
  #10  
Antiguo 23-09-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Por aquí estaremos cuando te haga falta
Responder Con Cita
  #11  
Antiguo 23-09-2015
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Ahora ten cuidado...

has puesto el listón muy alto ( de 1' 45s a 4 s ) y tus jefes esperarán ese rendimento en todo lo que hagas, jejeje

Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
Respuesta



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
Optimización consulta SQL con EXISTS en Firebird 2.5 briast SQL 0 05-11-2013 11:57:20
Optimización! Optimización! PiornoCKA&G Varios 1 31-12-2006 20:45:30
Optimización de los índices AMINOA2R Firebird e Interbase 13 04-08-2005 17:18:50
optimizacion del SQL seb@ SQL 1 22-09-2004 19:55:24
Optimizacion manuelpr Conexión con bases de datos 3 30-07-2004 17:26:24


La franja horaria es GMT +2. Ahora son las 00:29:43.


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