none
Demora al cargar datos en DataGridView RRS feed

  • Pregunta

  • Buenas. Estoy haciendo un programa y tengo el siguiente problema: tengo que cargar datos de un Procedimiento Almacenado a una grilla (son 636 datos en total) pero demora unos segundos en cargar siendo que con otras tablas (también cargadas con un Procedimiento Almacenado) lo hace al momento. Probé crear un proyecto nuevo y cargar en una grilla una tabla con 41.000 datos y los carga en el mismo tiempo que el 636 datos.

    Alguien tiene idea de porque puede ser que tarde?

    Les dejo el procedimiento almacenado que uso

    USE [PruebaEmpresa]
    GO
    /****** Object:  StoredProcedure [dbo].[BuscarTratamientos]    Script Date: 02/10/2019 21:28:24 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER PROCEDURE [dbo].[CargarListaTratamientos]
    			@idStatusTratamiento INT 
    AS
    BEGIN
    
    IF (@idStatusTratamiento = 1) -- 1 = Pendiente de Realizar
    		BEGIN
    
    			SELECT C.nombre as Cliente, Te.nombre as Técnico, T.fechaTratamiento as 'Fecha Tratamiento', T.horaCoord as HoraCoord, ST.nombre as 'Status Tratamiento', T.numCertificado, TC.nombre as 'Tipo Cliente' FROM Tratamientos T
    INNER JOIN Clientes C ON T.idCliente = C.IdCliente
    INNER JOIN Tecnicos Te on Te.idTecnico = T.idTecnico
    INNER JOIN StatusTratamiento ST on ST.idStatusTratamiento = T.idStatusTratamiento
    INNER JOIN TipoClientes TC on TC.idTipoCliente = C.idTipoCliente
    WHERE T.fechaTratamiento = CONVERT(CHAR(10),GETDATE(),102)
    															 AND T.horaCoord != ''
    															 AND T.idStatusTratamiento = @idStatusTratamiento
    															 AND T.EstadoRegistro = 1
    UNION ALL
    
    SELECT C.nombre, Te.nombre, T.fechaTratamiento, T.horaCoord, ST.nombre, T.numCertificado, TC.nombre FROM Tratamientos T
    INNER JOIN Clientes C ON T.idCliente = C.IdCliente
    INNER JOIN Tecnicos Te on Te.idTecnico = T.idTecnico
    INNER JOIN StatusTratamiento ST on ST.idStatusTratamiento = T.idStatusTratamiento
    INNER JOIN TipoClientes TC on TC.idTipoCliente = C.idTipoCliente
    WHERE T.fechaTratamiento <= GETDATE()+1
    															 AND T.horaCoord = ''
    															 AND T.idStatusTratamiento = @idStatusTratamiento
    															 AND T.EstadoRegistro = 1															 
    															 order by T.fechaTratamiento desc
    
    	 END
    
    	ELSE
    		BEGIN
    
    			SELECT * FROM [Tratamientos] WHERE [idStatusTratamiento] = @idStatusTratamiento AND [EstadoRegistro] = 1
    														ORDER BY [fechaTratamiento] ASC
    
    		END
    
    END
    

    Será porque uso UNION ALL o no tiene nada que ver?

    Saludos!


    Skull

    jueves, 3 de octubre de 2019 1:19

Respuestas

  • Hola, gracias por responder y perdón, no me di cuenta de que no lo había cambiado al grupo de SQL jaja

    Extrañamente ahora la primer consulta no me muestra ningún dato y si ejecuto solamente la segunda (sacando el filtro de T.HoraCoord ya que en la primera sentencia muestra los que tiene la Hora distinta a vacío y en la segunda las que son igual a vacío, o sea, sacando ese filtro me debería mostrar los que están y no están vacíos), me muestra 818 datos.

    Eso de la fecha no lo entendí del todo ya que el programa estaba hecho por otros desarrolladores y lo agarré hace poco jeje


    Skull

    jueves, 3 de octubre de 2019 13:50

Todas las respuestas

  • Saludos Skull, te convendría colocar este post en la sección de SQI

    Acceso a Datos SQL Server


    ARA San Juan 44 HEROES     ‗‗‗‗­|||||‗‗‗‗‗

    jueves, 3 de octubre de 2019 6:39
  • Hola:

    Es más una pregunta para el grupo de SqlServer y comprobar el plan de ejecución de la stored... pero rapidamente he visto que tienes un UNION ALL pero practicamente es lo mismo, quizás juntar en una sola SELECT...

    WHERE T.fechaTratamiento = CONVERT(CHAR(10),GETDATE(),102)

    Y

    WHERE T.fechaTratamiento <= GETDATE()+1

    Estas dos condiciones pueden ser las problemáticas, en la primera conviertes GETDATE() en varchar¿?, pero en la segunda no.

    Y la segunda condicion FechaTratamiento <= GETDATE() + 1 hace que los registros de la PRIMERA condición también se muestren, con lo que el UNION ALL tiene doble trabajo.

    Haz una prueba y quita todo el PRIMER SELECT, los resultados 'deberían' ser los mismos... y más rapido

    Un saludo

    • Propuesto como respuesta LG DES jueves, 17 de octubre de 2019 7:30
    jueves, 3 de octubre de 2019 7:38
  • Hola, gracias por responder y perdón, no me di cuenta de que no lo había cambiado al grupo de SQL jaja

    Extrañamente ahora la primer consulta no me muestra ningún dato y si ejecuto solamente la segunda (sacando el filtro de T.HoraCoord ya que en la primera sentencia muestra los que tiene la Hora distinta a vacío y en la segunda las que son igual a vacío, o sea, sacando ese filtro me debería mostrar los que están y no están vacíos), me muestra 818 datos.

    Eso de la fecha no lo entendí del todo ya que el programa estaba hecho por otros desarrolladores y lo agarré hace poco jeje


    Skull

    jueves, 3 de octubre de 2019 13:50