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 15-11-2012
DamianG DamianG is offline
Miembro
 
Registrado: mar 2008
Posts: 95
Poder: 17
DamianG Va por buen camino
Consulta lenta

Hola a todos, me podran comentar si la siguiente consulta la ven bien realizada? Porque a traves de distintos test me da que es lenta la misma.

Son 2 tablas en cuestion

NOMENCLADOR (CODIGO Y DESCRIPCION) ----------------CLAVE PRIMARIA (CODIGO)
VALORES (CODIGO, PRECIO, CODIGO_OBRASOCIAL) ------ (INDICE SOBRE CODIGO)


Código SQL [-]
select nomenclador.codido, nomenclador.descri, valores.precio from nomenclador

left join valores on valores.codigo = nomenclador.codigo and valores.codigo_obracial = '40'

where nomenclador.tipo = 'M'

order by nomenclador.descri

Muchas gracias
Responder Con Cita
  #2  
Antiguo 15-11-2012
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.267
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
  • Habría que saber de qué tipo son los código.
  • Lo mejor sería tener el PLAN de ejecución de la consulta para saber qué está pasando.
  • De cuantos registros por tabla hablamos.
  • ¿Esto "and valores.codigo_obracial = '40'" no debería estar en el WHERE?
  • Sabiendo cuantos registros salen del la JOIN, luego habría que ver si se filtra por TIPO, cómo de eficiente es eso, y al ordenar por DESCRI, cómo de eficiente es eso.

Vamos, que sin más información, no se puede saber...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 15-11-2012
DamianG DamianG is offline
Miembro
 
Registrado: mar 2008
Posts: 95
Poder: 17
DamianG Va por buen camino
  • Habría que saber de qué tipo son los código.
CODIGO: TIPO VARCHAR(15)
  • Lo mejor sería tener el PLAN de ejecución de la consulta para saber qué está pasando.
PLAN


NOMENCLADOR ORDER "DESCRI" INDEX ("TIPO"),

VALORES INDEX ("CODIGO", "CODIGO_OBRASOCIAL")
  • De cuantos registros por tabla hablamos.
NOMENCLADOR 2830 REG. VALORES 10500 REG.
Responder Con Cita
  #4  
Antiguo 15-11-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Deberías tener un código integer como clave primaria en ambas tablas, además una clave foránea en 'valores' enlazando a 'nomenclator'.
Eso independientemente del campo varchar(15) que tienes, que también debería ser clave foránea en 'valores'.

Aparte, esa consulta sql no está muy bien hecha, tal y como te han aconsejado antes.
Aunque sin más detalle, es difícil aconsejar.
Responder Con Cita
  #5  
Antiguo 16-11-2012
cointec cointec is offline
Miembro
 
Registrado: jul 2004
Ubicación: Alicante-España
Posts: 76
Poder: 20
cointec Va por buen camino
Tienes índices por nomenclator.tipo?
Y por nomenclator.descripcio?

Has probado los tiempos quitando el order by?
__________________
Un saludo, Jesus García
Responder Con Cita
  #6  
Antiguo 16-11-2012
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Cita:
Empezado por DamianG Ver Mensaje
Hola a todos, me podran comentar si la siguiente consulta la ven bien realizada? Porque a traves de distintos test me da que es lenta la misma.

Son 2 tablas en cuestion

NOMENCLADOR (CODIGO Y DESCRIPCION) ----------------CLAVE PRIMARIA (CODIGO)
VALORES (CODIGO, PRECIO, CODIGO_OBRASOCIAL) ------ (INDICE SOBRE CODIGO)


Código SQL [-]
select nomenclador.codido, nomenclador.descri, valores.precio from nomenclador

left join valores on valores.codigo = nomenclador.codigo and valores.codigo_obracial = '40'

where nomenclador.tipo = 'M'

order by nomenclador.descri

Muchas gracias
Como bien te han comentado Neftali y Casimiro Notevi, el AND Valores.CODIGO_OBRACIAL, según comentas al principio tienes un error en Valores.CODIGO_OBRACIAL tendría que ser Valores.CODIGO_OBRASOCIAL, respecto a la SQL deveria de utilizar ALIAS es más cómodo y libre de posibles errores.
Código SQL [-]
SELECT
    N.CODIGO
    ,N.DESCRI
    ,V.PRECIO
  FROM Nomenclador AS N
    LEFT JOIN Valores AS V
      ON V.CODIGO = N.CODIGO
  WHERE N.TIPO = 'M'
        AND V.CODIGO_OBRASOCIAL = '40'
  ORDER BY N.DESCRI

Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.
Responder Con Cita
  #7  
Antiguo 20-11-2012
DamianG DamianG is offline
Miembro
 
Registrado: mar 2008
Posts: 95
Poder: 17
DamianG Va por buen camino
Les comento, si el filtro "v.codigo_obrasocial = 40" lo saco del left join, hay valores que no me los da cuando no existe en la tabla de valores.

Por ej. tengo el codigo 600 que es VARIOS, por lo tanto no tiene ningun valor en la tabla de valores. Al trasladar el filtro como ustedes dicen el codigo 600 no aparece en la consulta, si lo dejo en el LEFT JOIN si.

Muchas gracias por sus respuestas.

Última edición por DamianG fecha: 20-11-2012 a las 14:27:22.
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
Consulta sql lenta en Firebird DamianG Firebird e Interbase 5 03-05-2012 21:32:11
Ayuda con consulta lenta, lenta, lenta Gregory Mazon Firebird e Interbase 22 27-06-2007 09:56:38
Consulta Super Lenta AGAG4 SQL 4 03-04-2006 19:36:50
Consulta muy lenta Walterdf Conexión con bases de datos 2 25-08-2004 18:37:57
lenta la consulta. digital Conexión con bases de datos 2 10-09-2003 15:38:13


La franja horaria es GMT +2. Ahora son las 05:03:23.


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