首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何优化SELECT MaxDate

如何优化SELECT MaxDate
EN

Stack Overflow用户
提问于 2013-03-20 22:04:20
回答 1查看 1.1K关注 0票数 1

我有一个查询,用来从tableA中选择一些数据,匹配tableB中的一些行。尽管它工作得很慢,但返回几百行数据需要大约20分钟。这里是问题,希望你有一些建议,在哪里需要改进或改变什么。

我使用的是SQL Server 2008

代码语言:javascript
复制
DECLARE @MaxDate DATETIME

SELECT @MaxDate = MAX(TimeStamp) -- I know it's not the best column name
FROM tableA
WHERE CodeName IN
(SELECT Tag FROM TableB 
WHERE POSITION = 'UP' AND PLACE = 'Shelf') 

IF @MaxDate > '2011-08-08'
BEGIN

 SELECT @MaxDate = MAX(TimeStamp) -- I know it's not the best column name
FROM tableA
WHERE CodeName IN
(SELECT Tag FROM TableB 
WHERE POSITION = 'UP' AND PLACE = 'Shelf')AND TimeStamp >= '2008-12-24' AND TimeStamp < '2010-12-24'

END
ELSE 
PRINT 'Date out of range'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-20 23:09:03

子查询看起来很可疑,您冒着对tableA中的每一行都进行表扫描的风险。您也只需要一个查询,并且无论如何都不应该将该变量重用于其他东西。

确保Codename、Tag、Position和Tag索引正确。如果“up”/“搁置”标签不是很常见,你应该能够通过一个tableA的表搜索逃脱。

代码语言:javascript
复制
    SELECT
        @MaxDate  = MAX(TimeStamp),
        @MaxDate2 = MAX(                
            CASE WHEN 
                TimeStamp >= '2008-12-24' AND
                TimeStamp < '2010-12-24'
                THEN TimeStamp END)
    FROM
        tableA A
    JOIN
        Tag T ON 
            T.CodeName=A.Tag 
    WHERE   
        T.POSITION = 'UP' AND
        T.PLACE = 'Shelf' 

并对结果做一些适当的处理

代码语言:javascript
复制
IF @MaxDate > '2011-08-08'
BEGIN
    SELECT @MaxDate2
END
ELSE 
PRINT 'Date out of range'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15525776

复制
相关文章

相似问题

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