Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Stored procedures sqlserver查询优化技术_Stored Procedures_Query Optimization_User Defined Functions_Indices - Fatal编程技术网

Stored procedures sqlserver查询优化技术

Stored procedures sqlserver查询优化技术,stored-procedures,query-optimization,user-defined-functions,indices,Stored Procedures,Query Optimization,User Defined Functions,Indices,我的存储过程需要很长时间才能执行。 除了使用一些良好的实践记录查询外,还有谁可以建议我如何加快存储过程的速度。 我听说过创建索引,但我不确定它们是什么。 请提出加快我的查询速度的所有最佳方法。 谢谢 去这里有一些: WHERE子句中的每一列都应该有索引。看见 您的SQL语言提供了如何实现这一点 学习如何解释计划,看看什么是慢的 存储过程语言是功能性的,而不是基于集合的。使用JOIN,不要落入(n+1)查询/迭代陷阱 了解使用某些函数如何强制您在WHERE子句中扫描表 如果您想立即获得一些帮助,请

我的存储过程需要很长时间才能执行。 除了使用一些良好的实践记录查询外,还有谁可以建议我如何加快存储过程的速度。 我听说过创建索引,但我不确定它们是什么。 请提出加快我的查询速度的所有最佳方法。 谢谢

这里有一些:

  • WHERE子句中的每一列都应该有索引。看见 您的SQL语言提供了如何实现这一点
  • 学习如何解释计划,看看什么是慢的
  • 存储过程语言是功能性的,而不是基于集合的。使用JOIN,不要落入(n+1)查询/迭代陷阱
  • 了解使用某些函数如何强制您在WHERE子句中扫描表

  • 如果您想立即获得一些帮助,请向我们展示存储过程,我要集中精力加速存储过程的第一个地方是函数(外部应用于底部附近)。它们可以而且经常绝对破坏性能。若要知道是否是这种情况,请制作一个已删除它们的存储过程版本,并查看它所产生的差异。通常从Tentherapeuticalt返回多少行?3)解释计划:是!!!非常好的建议。1) 索引:错误(如果按字面理解)。你应该考虑索引:是的。“必须有索引”:第4)个存储过程提供了基于集合(SQL)和过程的最佳性能。尽可能使用集合,而不是逐项处理。2) “where”原因中列的顺序可能会有所不同。有时会有很大的不同。关于看哪里的顺序。我的经验是使用MS Sql Server,很少发现摆弄WHERE表达式的顺序会产生任何影响。1)@palsm4是正确的。存储过程中对特定表的所有where子句引用只需要一个精心选择的索引。
    CREATE PROCEDURE [dbo].[usp_GetAlternates]
    (
      @NNumber CHAR(11) ,
      @pid INT ,
      @pbmid INT
    )
    AS 
    BEGIN
        TRUNCATE TABLE TempTherapeuticAlt
        INSERT  INTO TempTherapeuticAlt
                SELECT  NULL AS MedicationID ,
                        PR.ePrescribingName AS MedicationName ,
                        U.Strength AS MedicationStrength ,
                        FRM.FormName AS MedicationForm ,
                        PR.DEAClassificationID AS DEASchedule ,
                        NULL AS NDCNumber
                FROM    Product PR
                        JOIN ( SELECT   MP.MarketedProductID
                               FROM     table2 TCTSP
                                        JOIN table3 MP ON MP.SpecificProductID = TCTSP.SpecificProductID
                                        JOIN ( SELECT   TCTSP.TherapeuticConceptTreeID
                                               FROM     table3 MP
                                                        JOIN table2 TCTSP ON MP.SpecificProductID = TCTSP.SpecificProductID
                                                        JOIN ( SELECT
                                                              PR.MarketedProductID
                                                              FROM
                                                              table4 PA
                                                              JOIN Product PR ON PA.ProductID = PR.ProductID
                                                              WHERE
                                                              PA.NDC11 = @NNumber
                                                             ) PAPA ON MP.MarketedProductID = PAPA.MarketedProductID
                                             ) xxx ON TCTSP.TherapeuticConceptTreeID = xxx.TherapeuticConceptTreeID
                             ) MPI ON PR.MarketedProductID = MPI.MarketedProductID
                        JOIN ( SELECT   P.ProductID ,
                                        O.Strength ,
                                        O.Unit
                               FROM     Product AS P
                                        INNER JOIN table3 AS M ON P.MarketedProductID = M.MarketedProductID
                                        INNER JOIN table5 AS S ON M.SpecificProductID = S.SpecificProductID
                                        LEFT OUTER JOIN table6 AS O ON S.SpecificProductID = O.SpecificProductID
                               GROUP BY P.ProductID ,
                                        O.Strength ,
                                        O.Unit
                             ) U ON PR.ProductID = U.ProductID
                        JOIN ( SELECT   PA.ProductID ,
                                        S.ScriptFormID ,
                                        F.Code AS NCPDPScriptFormCode ,
                                        S.FormName
                               FROM     table4 AS PA
                                        INNER JOIN table7 AS S ON PA.NCPDPScriptFormCode = S.NCPDPScriptFormCode
                                        INNER JOIN table8 AS F ON S.FormName = F.FormName
                               GROUP BY PA.ProductID ,
                                        S.ScriptFormID ,
                                        F.Code ,
                                        S.FormName
                             ) FRM ON PR.ProductID = FRM.ProductID
                GROUP BY PR.ePrescribingName ,
                        U.Strength ,
                        FRM.FormName ,
                        PR.DEAClassificationID
                ORDER BY pr.ePrescribingName
    
    
        SELECT  LL.ProductID AS MedicationID ,
                temp.MedicationName ,
                temp.MedicationStrength ,
                temp.MedicationForm ,
                temp.DEASchedule ,
                temp.NDCNumber ,
                fs.[ReturnFormulary] AS FormularyStatus ,
                copay.CopaTier ,
                copay.FirstCopayTerm ,
                copay.FlatCopayAmount ,
                copay.PercentageCopay
        FROM    TempTherapeuticAlt temp
                OUTER APPLY ( SELECT TOP 1
                                        ProductID
                              FROM      Product
                              WHERE     ePrescribingName = temp.MedicationName
                            ) AS LL
                OUTER APPLY function1(@pid, LL.ProductID, @pbmid) AS fs
                OUTER APPLY function2(LL.ProductID, @pbmid) AS copay
        ORDER BY LL.ProductID
    
        TRUNCATE TABLE TempTherapeuticAlt
    END