首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何优化这个select语句?

如何优化这个select语句?
EN

Stack Overflow用户
提问于 2015-12-23 00:19:45
回答 1查看 59关注 0票数 0

以下语句的执行时间几乎为2分钟,而使用相同表和视图且结果相同的select语句的执行时间仅为前者的一半:

代码语言:javascript
复制
SELECT
@NEW_CAREER_NUMBER = MAX(a.[career number])
FROM selecthr20.employee.[career history] a 
    INNER JOIN selecthr20.Employee.[Current Appointments As At Evaluation Date] b
        ON a.[appointment number] = b.[appointment number]  
    INNER JOIN Employee.[BSK Changes in Selected Period] c
        ON a.[career number] = c.[primary key number]
    INNER JOIN selecthr20.employee.[career history extra detail] d
        ON a.[career number] = d.[career number]
            AND c.[primary key number] = d.[career number]
where c.[primary key name] = 'Career Number'
and c.[audit date] < (Select max([audit date]) from Employee.[BSK Changes in Selected Period] where [primary key number] = @LATEST_CAREER_NUMBER)
and b.[person number] = @PERSON_ID

‘'BSK in Selected Period c’是一个视图,其余的是表。

EN

回答 1

Stack Overflow用户

发布于 2015-12-23 00:54:56

您在d连接上有一个冗余条件。

试一试

代码语言:javascript
复制
SELECT
@NEW_CAREER_NUMBER = MAX(a.[career number])
FROM selecthr20.employee.[career history] a 
JOIN selecthr20.Employee.[Current Appointments As At Evaluation Date] b
      ON b.[appointment number] = a.[appointment number] 
     and b.[person number]      = @PERSON_ID  
JOIN selecthr20.employee.[career history extra detail] d
      ON d.[career number] = a.[career number] 
JOIN Employee.[BSK Changes in Selected Period] c
      ON c.[primary key number] = a.[career number] 
     and c.[primary key name]   = 'Career Number'
     and c.[audit date] < ( Select max([audit date])   
                              from Employee.[BSK Changes in Selected Period]
                             where [primary key number] = @LATEST_CAREER_NUMBER );

自然地将索引放在连接条件上

如果在c连接上有一个循环,那么可以使用一个变量作为审计日期。

我会这么做的--这几乎没有什么坏处

代码语言:javascript
复制
declare @auditdate DateTime = ( Select max([audit date]) 
                                  from Employee.[BSK Changes in Selected Period] 
                                 where [primary key number] = @LATEST_CAREER_NUMBER );

... 

and c.[audit date] < @auditdate 
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34420143

复制
相关文章

相似问题

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