首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对sql server中来自大型数据集的筛选数据的性能优化

对sql server中来自大型数据集的筛选数据的性能优化
EN

Stack Overflow用户
提问于 2017-06-12 09:04:47
回答 2查看 196关注 0票数 1

我想用下面的查询修复一些性能问题。

  • Tbl_A有6,500万行
  • Tbl_B有2行

我需要用Tbl_A的值来过滤Tbl_b

代码语言:javascript
运行
复制
 SELECT COUNT(*) 
 FROM Tbl_A R1 WITH (NOLOCK) 
      INNER JOIN Tbl_B PBD 
          ON PBD.Indicators = CASE R1.Indicator WHEN 'Y' THEN 'B'
                                                WHEN 'N' THEN 'D'       
                                                WHEN '1' THEN 'B'
                                                WHEN '0' THEN 'D'       
                                                ELSE R1.Indicator       
                             END

我尝试过使用in &I代替join,但是我找不到任何性能上的好处。请协助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-12 09:53:29

你在这里做不了什么。当然,您应该在Tbl_A.IndicatorTbl_B.Indicators上有索引。

我看到的唯一提高性能的选项是一个持久化的计算列:

代码语言:javascript
运行
复制
ALTER TABLE tbl_a ADD pbd_indicator AS (CASE indicator WHEN 'Y' THEN 'B'
                                                       WHEN 'N' THEN 'D'       
                                                       WHEN '1' THEN 'B'
                                                       WHEN '0' THEN 'D'       
                                                       ELSE Indicator       
                                        END) PERSISTED;

添加相关索引:

代码语言:javascript
运行
复制
CREATE INDEX idx_tbl_a_pbd ON tbl_a(pbd_indicator);

并相应地更改查询:

代码语言:javascript
运行
复制
SELECT COUNT(*) 
FROM tbl_a r1
INNER JOIN tbl_b pbd ON pbd.indicators = r1.pbd_indicator;
票数 3
EN

Stack Overflow用户

发布于 2017-06-12 09:15:46

尝试一下,连接case语句可能需要大量的逻辑读取,而在内部查询中使用case语句。

代码语言:javascript
运行
复制
SELECT COUNT(*)
FROM (
    SELECT CASE Indicator
            WHEN 'Y'
                THEN 'B'
            WHEN 'N'
                THEN 'D'
            WHEN '1'
                THEN 'B'
            WHEN '0'
                THEN 'D'
            ELSE Indicator
            END AS Indicator
    FROM Tbl_b
    ) R1
INNER JOIN Tbl_a PBD
    ON PBD.Indicators = R1.indicator
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44495447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档