【问题标题】:Why Select Query slow down when i use an integer column in select clause为什么当我在选择子句中使用整数列时选择查询会变慢
【发布时间】:2011-03-23 03:21:55
【问题描述】:

我正在尝试在 SQL Server 2000 中优化以下查询。除了包含 200 万条记录的 Prod_Lot_Stage_Wise_Detl 表之外,每个表都有超过 300 000 行。

当我执行下面的查询时,不包括 LotStgWs.Finished_Pcs 字段(属于 Prod_Lot_Stage_Wise_Detl 表),结果会在 20 秒内出现。

但是,如果我包含 LotStgWs.Finished_Pcs 字段,则执行时间会超过 2 分钟。我不明白这里出了什么问题以及 SQL Server 2000 如何处理整数字段。为每个表正确定义了索引。

SELECT 
 JangRecv.Jangad_Ref_Code,         
 LotRecv.Total_Pcs Org_Pcs,      
 LotRecv.Total_Cts Org_Cts,
 LotStgWs.Finished_Pcs,
        (Isnull(ReEst.Exp_Wt,LotRecv.Exp_Yield)) Exp_Yield
 FROM 
 Prod_Jangad_Receive_Tran  JangRecv With(NoLock) Inner Join 
 Prod_Lot_receive_Tran   LotRecv  With(NoLock) On      (JangRecv.Jangad_Seq_No = LotRecv.Jangad_Seq_No) Inner Join
 Prod_Lot_Stage_Wise_Detl  LotStgWs With(NoLock) On (
          LotStgWs.Jangad_Seq_No = LotRecv.Jangad_Seq_No  And 
          LotStgWs.Lot_Seq_No = LotRecv.Lot_Seq_No   And
          LotStgWs.Stage_Seq_No  = ISNULL(
                     (SELECT  MAX(Delv_Stage_Seq_No) 
               FROM  Prod_Lot_Delivery_Tran      
               WHERE  Jangad_Seq_No = JangRecv.Jangad_Seq_No
               ), JangRecv.Exp_Delv_Stage_Seq_No
              )
             ) Left Outer Join
 PPCS_QMA_Diamond_RE_Estimation  ReEst    With(NoLock) On (LotStgWs.Jangad_Seq_No = ReEst.Jangad_Seq_No And LotStgWs.Lot_Seq_No = ReEst.Lot_Seq_No And LotStgWs.Stage_Seq_No = ReEst.Stage_Seq_No)
Where 
 LotRecv.Lot_Recv_Div_Seq_No = 1
ORDER BY  JangRecv.Jangad_Ref_Code, LotRecv.Lot_Num_Alias

【问题讨论】:

  • 出于兴趣,30万是多少?
  • @nonnb:谷歌说 30 万是 30 万。

标签: sql-server-2000


【解决方案1】:

确保您加入的所有内容都有索引,尤其是在那个大表上。 区别很重要:在非索引列上搜索(或连接)需要全表扫描,这是线性复杂性的(即,对于 200 万条记录,您需要在最坏的情况下执行 200 万次比较)。在索引列上,数据库引擎可以使用具有对数复杂性的二进制搜索(即,对于 200 万条记录,在最坏的情况下需要 21 次比较)。

【讨论】:

    【解决方案2】:

    如果我正确理解了问题,那么您在查询中唯一要更改的是 LotStgWs.Finished_Pcs 的选择...如果这是正确的,我之前在 SQL Server 2000 中遇到过类似的问题...抛出一个LotStgWs.Finished_Pcs 上的索引。这以前对我有用。这似乎没有多大意义,但它确实有效。祝你好运

    【讨论】:

      【解决方案3】:

      您也可以尝试重建索引:http://www.sql-server-performance.com/tips/rebuilding_indexes_p1.aspx

      但无论如何,如果我是你,我会尝试改进我的数据库结构,因为在加入那些大表时使用如此复杂的子选择并不是一个好的技术。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-10
        • 1970-01-01
        • 1970-01-01
        • 2021-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多