Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Optimizar Stored Procedure

Estas en el tema de Optimizar Stored Procedure en el foro de SQL Server en Foros del Web. Hola a todos, espero que se encuentren muy bien, mi consulta es la siguiente: Tengo un Stored Procedure que me han pedido optimizar. Este es: ...
  #1 (permalink)  
Antiguo 19/11/2013, 05:54
 
Fecha de Ingreso: diciembre-2009
Mensajes: 82
Antigüedad: 14 años, 3 meses
Puntos: 0
Optimizar Stored Procedure

Hola a todos, espero que se encuentren muy bien, mi consulta es la siguiente: Tengo un Stored Procedure que me han pedido optimizar. Este es:

Código SQL:
Ver original
  1. USE [TeamTemplate]
  2. GO
  3.  
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8.  
  9. ALTER PROCEDURE [dbo].[Entity_SelectContact_pa]
  10.   @WorkorderID VARCHAR(10)
  11. , @WorkorderMod VARCHAR(5) = '00'
  12. , @FilterBy VARCHAR(15) = 'Team'
  13. , @SearchBy VARCHAR(50) = NULL
  14. , @band VARCHAR(3) = NULL
  15.  
  16. AS
  17.  
  18. SET NOCOUNT ON
  19.  
  20. IF @FilterBy = 'Team'
  21. SELECT @FilterBy = NULL
  22.  
  23. IF @SearchBy = '' OR @SearchBy = 'undefined'
  24. SELECT @SearchBy = NULL
  25.  
  26. IF @band = ''
  27. SELECT @band = NULL
  28.  
  29. IF @band IS NULL OR @band <> 'All' 
  30. BEGIN
  31.     IF ISNUMERIC(@FilterBy) = 1
  32.     BEGIN
  33.        
  34.         CREATE TABLE #VendorId
  35.         (
  36.             VendorId        INT
  37.         )  
  38.  
  39.         INSERT  INTO #VendorId
  40.         SELECT  q.VendorID
  41.         FROM    Quotes q
  42.                 INNER JOIN CostCode cc ON q.DefaultCC = cc.CostCodeID
  43.         WHERE   q.WorkorderID = @WorkorderID    AND q.QuoteStatus IN ('Draft','Committed','Closed') AND q.DefaultCC = @FilterBy
  44.  
  45.         INSERT  INTO #VendorId
  46.         SELECT  b.VendorID
  47.         FROM    buyout b
  48.                 INNER JOIN CostCode cc ON b.OrderCostCode = cc.CostCodeID
  49.         WHERE   WorkorderID = @WorkorderID  AND b.STATUS IN ('Draft','Committed','Executed','Closed')AND b.OrderCostCode    = @FilterBy
  50.  
  51.         SELECT  DISTINCT u.UserId,(e.ShortName +' - '+ u.FirstName +' '+ u.LastName) AS UserName,
  52.                 '('+ isnull(u.EmailAddress,'') + ')' AS EmailAddress, u.STATUS
  53.         FROM    Users u
  54.                 INNER JOIN Entity e         ON  u.EntityID  =   e.EntityID
  55.                 INNER JOIN Vendor v         ON  e.EntityID  =   v.EntityID
  56.         WHERE   u.EntityID IN   (  
  57.                                     SELECT  et.EntityID
  58.                                     FROM    EntityType et
  59.                                     WHERE   et.EntityID = e.EntityID AND et.EntityTypeName = 'Vendor' AND et.STATUS = 'on'
  60.                                 )   AND
  61.                 v.Vendor# IN ( SELECT DISTINCT VendorID FROM #VendorId )
  62.         ORDER   BY e.ShortName +' - '+ u.FirstName +' '+ u.LastName
  63.  
  64.         DROP TABLE #VendorId
  65.     END
  66.     ELSE
  67.     BEGIN
  68.         IF @FilterBy IS NULL OR @FilterBy <> 'All'
  69.         BEGIN
  70.             SELECT  DISTINCT u.UserID,(e.ShortName +' - '+ u.FirstName +' '+ u.LastName) AS UserName ,
  71.                     '('+ isnull(u.EmailAddress,'') + ')' AS EmailAddress, u.STATUS
  72.             FROM    Users u  
  73.                     INNER JOIN WorkorderTeam wt ON wt.UserID = u.UserID  
  74.                     INNER JOIN Entity e ON u.EntityID = e.EntityID  
  75.             WHERE   wt.WorkorderID = @WorkorderID  AND
  76.                     wt.WorkorderMod = @WorkorderMod AND
  77.                     wt.STATUS = 'show' AND
  78.                     (@FilterBy IS NULL OR wt.TeamMemberType = @FilterBy)  
  79.             ORDER   BY e.ShortName +' - '+ u.FirstName +' '+ u.LastName
  80.         END
  81.  
  82.         IF @FilterBy = 'All'
  83.         BEGIN
  84.             SELECT  u.UserId, (e.ShortName +' - '+ u.FirstName +' '+ u.LastName) AS UserName,
  85.                     '('+ isnull(u.EmailAddress,'') + ')' AS EmailAddress, u.STATUS
  86.             FROM    Users u
  87.                     INNER JOIN Entity e ON e.EntityID = u.EntityID
  88.             WHERE   u.EntityID IN   (
  89.                                         SELECT  et.EntityID
  90.                                         FROM    EntityType et
  91.                                         WHERE   et.EntityID = e.EntityID AND
  92.                                                 et.EntityTypeName IN ('Customer','Occupant','ThirdParty','Vendor','SP') AND
  93.                                                 et.STATUS = 'on'
  94.                                     )   AND
  95.                     (@SearchBy IS NULL OR e.ShortName +' - '+ u.FirstName +' '+ u.LastName LIKE '%' + @SearchBy + '%')
  96.             ORDER   BY u.FirstName, u.LastName
  97.         END
  98.     END
  99. END
  100.  
  101. IF @band = 'All'
  102. BEGIN
  103.     SELECT  u.UserId, (e.ShortName +' - '+ u.FirstName +' '+ u.LastName) AS UserName,'('+ isnull(u.EmailAddress,'') + ')' AS EmailAddress,u.STATUS
  104.     FROM    Users u
  105.             INNER JOIN Entity e ON e.EntityID = u.EntityID
  106.     WHERE   u.STATUS = 'on' AND
  107.             u.EntityID IN (SELECT et.EntityID FROM EntityType et WHERE et.EntityID = e.EntityID AND et.STATUS = 'on') AND
  108.             (@SearchBy IS NULL OR e.ShortName +' - '+ u.FirstName +' '+ u.LastName LIKE '%' + @SearchBy + '%')
  109.     ORDER   BY u.FirstName, u.LastName
  110. END

[/CODE]

Podrían decirme como puedo hacerlo más óptimo. Gracias.

Última edición por gnzsoloyo; 19/11/2013 a las 06:17 Razón: Mal etiquetado
  #2 (permalink)  
Antiguo 19/11/2013, 08:20
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Optimizar Stored Procedure

para optimizar un procedure, deberias de revisar los indices de tus tablas, verificar si tu plan de ejecucion asi como el tiempo de duracion del procedure, con solo ver el query no se te puede ayudar demasiado.

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: procedure, select, stored
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:00.