首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Server连接临时表需要很长时间

Server连接临时表需要很长时间
EN

Stack Overflow用户
提问于 2012-07-11 20:08:48
回答 1查看 5.8K关注 0票数 2

我试图在结果的末尾添加一列,以显示PO中的任何项是否有库存(其中包含“是”或“否”)。opPOTRACK是我的表,有POs和其他我想显示的信息,inItemLocation是每个条目都有一行的表。经过一些文本操作后,它们(松散地)通过opPOTRACK.cpono = inItemLocation.PONO进行连接。

到目前为止,我认为最好的方法是将结果放在一个临时表中,然后将该表与我的常规查询连接起来。其中两个表连接在一个列上,在该列中,我必须导出PO编号(我没有设计数据库,也无法更改模式)。执行字符串操作不会减慢我的第一个联接,所以我不确定它是否影响了我的第二个联接。当我添加第二个join时,它只运行了几分钟(4分钟后取消;不确定实际需要多长时间)。

我肯定我的加入方式有问题。

代码语言:javascript
运行
复制
IF OBJECT_ID('tempdb..#StockedTbl') IS NOT NULL
BEGIN
    DROP TABLE #StockedTbl
END

CREATE TABLE #StockedTbl
(
    ID int IDENTITY(1,1) PRIMARY KEY,
    PONo varchar(10),
    Stocked varchar(5)
)


INSERT INTO #StockedTbl
(
    PONo,
    Stocked
)
SELECT item.PONo, "Stocked" = CASE 
                      WHEN item.Loc LIKE 'ABC%' THEN 'No'
                      ELSE 'Yes'
                      END 
                      FROM inItemLocation item 

CREATE CLUSTERED INDEX IDX_C_StockedTbl_UserID ON #StockedTbl(PONo)


SELECT  *
FROM  (SELECT  RIGHT(LEFT(item.PONo,6), 5) AS POTrunc, item.WhseLoc, po.cpono, po.Buyer, po.Vendno, po.OrderDate, po.StockDate, 
                      po.StockNote, po.Status, po.StatusChangeDate,
                      ROW_NUMBER() OVER (PARTITION BY po.cpono ORDER BY po.cpono) AS RowNumber,
                      st.Stocked
FROM          dbo.inItemLocation item
                    LEFT JOIN dbo.opPOTRACK po ON RIGHT(LEFT(item.PONo,6), 5) = po.cpono
                    LEFT JOIN #StockedTbl st ON RIGHT(LEFT(item.PONo,6), 5) = RIGHT(LEFT(st.PONo,6), 5)
) AS a
WHERE   a.RowNumber = 1 

DROP TABLE #StockedTbl
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-11 20:14:20

我建议这样做。首先,为什么#temp表需要一个IDENTITY列,为什么它需要是PRIMARY KEY?第二,为什么不创建一个更方便连接的列呢?

代码语言:javascript
运行
复制
CREATE TABLE #StockedTbl
(
    PONo varchar(10),
    Stocked varchar(5),
    PONoMatch AS CONVERT(CHAR(5), RIGHT(LEFT(PONo,6),5)) PERSISTED
);
CREATE CLUSTERED INDEX x ON #StockedTbl(PONoMatch);

现在,至少可以从一些子句中删除这些计算,但是根据工作的执行位置(执行计划可以告诉我们),您可能也希望考虑基表中的计算列。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11440626

复制
相关文章

相似问题

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