小编Bar*_*cki的帖子

T-SQL独特计数查询...可以使用EXISTS或其他东西进行优化吗?

有没有办法让这个查询运行得更快(意味着从SQL Server中获取更少的读取/ IO).逻辑本质上是

  1. 我从列中计算不同的值
  2. 如果有超过1个不同的值,则认为它是存在的
  3. List是使用列的名称构建的,如果存在,则为1或0

我想用EXISTS做一些事情(在t-sql中,如果SQL Server找到与EXISTS谓词的匹配,则终止对表/索引的扫描).我不确定这个查询是否可行.

注意:我不是在寻找像桌子上有索引的答案......远远超出:)

    with SomeCTE as
            (                   
    select 
    count(distinct(ColumnA)) as ColumnA,        
    count(distinct(ColumnB)) as ColumnB,        
    count(distinct(ColumnC)) as ColumnC
from VERYLARGETABLE
        )
select 'NameOfColumnA', case when ColumnA > 1 then 1 else 0 end from SomeCTE
UNION ALL
select 'NameOfColumnB', case when ColumnB > 1 then 1 else 0 end from SomeCTE
UNION ALL
select 'NameOfColumnC', case when ColumnC > 1 then 1 else 0 end from SomeCTE
Run Code Online (Sandbox Code Playgroud)

只是复制我在评论中发布的内容.所以在测试了这个解决方案 它使查询运行"更快".举两个例子.一个查询从50秒到3秒.另一个从9分钟以上(停止运行)下降到1分03秒.我也很想念指数(所以要根据DTA应该运行14%的速度)也是我在SQL Azure的DB(你在哪里正在I/O,CPU和内存tempddb方面大幅节流)运行这个...很不错解决方案四周.一个缺点是min/max对位列不起作用,但可以转换它们.

sql t-sql sql-server

4
推荐指数
1
解决办法
775
查看次数

标签 统计

sql ×1

sql-server ×1

t-sql ×1