Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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
SQL SERVER中子句的替代方法_Sql_Sql Server_Performance_Optimization - Fatal编程技术网

SQL SERVER中子句的替代方法

SQL SERVER中子句的替代方法,sql,sql-server,performance,optimization,Sql,Sql Server,Performance,Optimization,我正在运行以下查询,这花费了太多时间: select a.id, b.name from temp.dbo.COLD a with (NOLOCK) inner join temp.dbo.FIVE b with (NOLOCK) on a.id = b.cid where a.proc_flag ='C' and b.dt >= dateadd(D,-(cast('60' as int)),cast(GETDATE() as date)) and b.cCode in ( 'ADC'

我正在运行以下查询,这花费了太多时间:

select a.id, b.name 
from temp.dbo.COLD a with (NOLOCK)
inner join temp.dbo.FIVE b with (NOLOCK)
on a.id = b.cid
where a.proc_flag ='C'
and b.dt >= dateadd(D,-(cast('60' as int)),cast(GETDATE() as date))
and b.cCode in 
(
'ADC',
'BUNE',
'DD',
'HUUP',
'INER',
'MNER',
'NCIT',
'NOG',
'TRON',
'WRUM',
'XFNA',
'BL', 
'DIO', 
'DOM', 
'HU',
'ILL',
'INKT',
'LB',
'NOM',
'PE',
'RF',
'SE',
'XER',
'Pge',
'dd',
'CC');
让我知道我是否可以使用其他内容而不是在子句中。
非常感谢您的帮助。

使用要比较的值加入vs临时表。这允许更多的查询优化。确保临时表有一个包含统计信息的索引。

使用要比较的值连接vs临时表。这允许更多的查询优化。确保临时表有一个包含统计信息的索引。

您需要测量并找到瓶颈。阅读SQL性能不是由您编写文本的方式决定的,优化器将以ti认为合适的方式重新解释它。都是关于存在哪些数据访问路径备选方案。换句话说:索引

发布完整准确的数据模型。发布数据基数(表大小)

我的8号球告诉我你需要:

  • temp.dbo.COLD(id)
  • temp.dbo.FIVE(dt)

您需要测量并找到瓶颈。阅读SQL性能不是由您编写文本的方式决定的,优化器将以ti认为合适的方式重新解释它。都是关于存在哪些数据访问路径备选方案。换句话说:索引

发布完整准确的数据模型。发布数据基数(表大小)

我的8号球告诉我你需要:

  • temp.dbo.COLD(id)
  • temp.dbo.FIVE(dt)
    • 这是您的问题:

      select a.id, b.name 
      from temp.dbo.COLD a with (NOLOCK) inner join
           temp.dbo.FIVE b with (NOLOCK)
           on a.id = b.cid
      where a.proc_flag = 'C' and
            b.dt >= dateadd(D,-(cast('60' as int)),cast(GETDATE() as date)) and
            b.cCode in ( . . . )
      
      在中的
      中的值列表不太可能与性能瓶颈密切相关——除了它们带来更多行进行处理这一事实之外。我建议采用以下综合指数:

      COLD(proc_flag, id)
      FIVE(id, dt, cCode, name)
      
      这些是查询的索引,应该有助于提高性能。

      这是您的查询:

      select a.id, b.name 
      from temp.dbo.COLD a with (NOLOCK) inner join
           temp.dbo.FIVE b with (NOLOCK)
           on a.id = b.cid
      where a.proc_flag = 'C' and
            b.dt >= dateadd(D,-(cast('60' as int)),cast(GETDATE() as date)) and
            b.cCode in ( . . . )
      
      中的
      中的值列表不太可能与性能瓶颈密切相关——除了它们带来更多行进行处理这一事实之外。我建议采用以下综合指数:

      COLD(proc_flag, id)
      FIVE(id, dt, cCode, name)
      

      这些是用于查询的索引,应该有助于提高性能。

      b表中是否有其他值可以定义这些cCode值,这些值可以在temp表上的exists子句检查索引中使用。问题似乎就在这里,而不是您在
      中使用中的
      declrre@d date=dateadd(d,-60,cast(GETDATE()as date))
      然后使用
      和b.dt>=d
      。这样的代码只对日期求值一次。@kpa6uk:无论您如何编写查询,任何代码都只对GETDATE求值一次
      GETDATE
      a。@RemusRusanu感谢这篇知识文章。然而,我个人认为这个操作将提高代码的可读性。b表中是否有另一个值可以定义这些cCode值,这些值可以在临时表上的exists clauseCheck索引中使用。问题似乎就在这里,而不是您在中使用中的
      declrre@d date=dateadd(d,-60,cast(GETDATE()as date))
      然后使用
      和b.dt>=d
      。这样的代码只对日期求值一次。@kpa6uk:无论您如何编写查询,任何代码都只对GETDATE求值一次
      GETDATE
      a。@RemusRusanu感谢这篇知识文章。然而,我个人认为,这一行动将提高这段代码的可读性。