Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/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
Performance 性能调优小T-SQL IF-ELSE语句,运行数千次_Performance_Tsql_If Statement - Fatal编程技术网

Performance 性能调优小T-SQL IF-ELSE语句,运行数千次

Performance 性能调优小T-SQL IF-ELSE语句,运行数千次,performance,tsql,if-statement,Performance,Tsql,If Statement,我试图从这个查询中挤出一些性能,如果有任何帮助,我将不胜感激,我唯一能做的就是在第二条语句中删除orderby,因为它是按主键排序的 --SET STATISTICS TIME ON DECLARE @MasterAdGroupId Int = 3469476, @IncludeDeleted Bit = 1, @Deleted Bit = 0, @IncludeDirty Bit= 0,

我试图从这个查询中挤出一些性能,如果有任何帮助,我将不胜感激,我唯一能做的就是在第二条语句中删除orderby,因为它是按主键排序的

--SET STATISTICS TIME ON

DECLARE             
        @MasterAdGroupId Int = 3469476,
        @IncludeDeleted Bit = 1,
        @Deleted Bit = 0,
        @IncludeDirty Bit= 0,
        @Dirty Bit =1,
        @IncludeDupes Bit=0,
        @OrderByText Bit= 1,
        @UseInDisplayNetworkOnly Bit=0

BEGIN

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 
IF @OrderByText=1 
BEGIN
    SELECT MasterKeywordId, Text, URL, MasterAdGroupId, mk.KeywordTemplateId, Dirty, mk.Deleted, Negative, Duplicate  
      FROM admanMasterKeyword_tbl mk
INNER JOIN admanKeywordTemplate_tbl kt on kt.KeywordTemplateId = mk.KeywordTemplateId
     WHERE MasterAdGroupId = @MasterAdGroupId 
       AND mk.Deleted = CASE WHEN @IncludeDeleted=0 THEN @Deleted ELSE mk.Deleted END
       AND Dirty = CASE WHEN @IncludeDirty=0 THEN @Dirty ELSE Dirty END
       AND Duplicate = CASE WHEN @IncludeDupes=1 THEN Duplicate ELSE 0 END
       AND UseInDisplayNetwork = CASE WHEN @UseInDisplayNetworkOnly=1 THEN 1 ELSE UseInDisplayNetwork END
  ORDER BY Text 
END
ELSE
BEGIN
    SELECT MasterKeywordId, Text, URL, MasterAdGroupId, mk.KeywordTemplateId, Dirty, mk.Deleted, Negative, Duplicate  
      FROM admanMasterKeyword_tbl mk
INNER JOIN admanKeywordTemplate_tbl kt on kt.KeywordTemplateId = mk.KeywordTemplateId
     WHERE MasterAdGroupId = @MasterAdGroupId 
       AND mk.Deleted = CASE WHEN @IncludeDeleted=0 THEN @Deleted ELSE mk.Deleted END
       AND Dirty = CASE WHEN @IncludeDirty=0 THEN @Dirty ELSE Dirty END
       AND Duplicate = CASE WHEN @IncludeDupes=1 THEN Duplicate ELSE 0 END
       AND UseInDisplayNetwork = CASE WHEN @UseInDisplayNetworkOnly=1 THEN 1 ELSE UseInDisplayNetwork END
  ORDER BY MasterKeywordId 
END

END

这不会改变任何性能方面的问题,但如果在这两个查询中所做的所有更改都是它们的排序方式(我看不出任何差异),则可以将CASE语句按顺序排列,而不必重复或执行if语句:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 

    SELECT MasterKeywordId, Text, URL, MasterAdGroupId, mk.KeywordTemplateId, Dirty, mk.Deleted, Negative, Duplicate  
      FROM admanMasterKeyword_tbl mk
INNER JOIN admanKeywordTemplate_tbl kt on kt.KeywordTemplateId = mk.KeywordTemplateId
     WHERE MasterAdGroupId = @MasterAdGroupId 
       AND mk.Deleted = CASE WHEN @IncludeDeleted=0 THEN @Deleted ELSE mk.Deleted END
       AND Dirty = CASE WHEN @IncludeDirty=0 THEN @Dirty ELSE Dirty END
       AND Duplicate = CASE WHEN @IncludeDupes=1 THEN Duplicate ELSE 0 END
       AND UseInDisplayNetwork = CASE WHEN @UseInDisplayNetworkOnly=1 THEN 1 ELSE UseInDisplayNetwork END
  ORDER BY (CASE WHEN @OrderByText = 1 THEN Text ELSE MasterKeywordId END) 

此查询的查询计划是什么样子的?可以在任何地方创建索引?

主键没有隐含的顺序,只是数据返回的顺序。要优化这种类型的查询,我将参考Erland Sommarskog关于动态搜索参数的权威文章:查询计划是一个通过嵌套循环与另一个索引搜索连接在一起的聚集索引搜索,因此它看起来很好。您的代码看起来非常干净,所以我将看看明天在办公室时是否做了什么,谢谢