【问题标题】:sql query taking too longsql查询耗时过长
【发布时间】:2011-11-28 11:21:43
【问题描述】:

我有一个简单的“插入..”查询,执行大约需要 40 秒。它只是从一个表中获取记录并插入到另一个表中。

  1. 我在tbl_TempCatalogue 表上的F1BatchID 上有索引
  2. 146624 条记录受到影响。
  3. select 本身并不慢,insert into 很慢。

完整的查询是:

insert into tbl_ItemPrice
    (CATALOGUEVERSIONID,SERIESNUMBER,TYPE,PRICEFIELD,PRICE,
PRICEONREQUEST,recordid)
select  296 as CATALOGUEVERSIONID
        ,ISNULL(F2,'-32768') as SERIESNUMBER
        ,ISNULL(F3,'-32768') as TYPE
        ,ISNULL(F4,'-32768') as PRICEFIELD,F5 as PRICE
       ,(case  when F6 IS NULL  then null when F6 = '0' then 'False' 
                                else 'True' end ) as PRICEONREQUEST
       ,newid()
 from tbl_TempCatalogue  
 where F1 = 450
  and BATCHID = 72

谢谢

【问题讨论】:

  • 我认为您还应该检查/提供:1. 涉及多少条记录 2. 如果您在 sql server 上进行选择需要多长时间。
  • tbl_TempCatalogue 上有任何索引吗?表中有多少行?查询检索到的总数占多少比例?
  • 您是否验证过 select 可以快速返回所有内容,而不仅仅是响应时间?

标签: sql sql-server-2005 optimization


【解决方案1】:

如果您的表很大,您可能会受益于 tbl_TempCatalogue 表中 F1 和 BATCHID 的索引。目前尚不清楚您使用的是什么 DBMS,但大多数都有不错的工具来向您展示执行计划。如果您正在对大型表进行全表扫描,则可能需要很长时间才能运行。

另外,您说“插入”很慢,但您只包含了选择的代码。选择本身很慢吗?

【讨论】:

  • 很抱歉没有添加详细信息 1) 我在 tbl_TempCatalogue 表上的 F1 和 BatchID 上有索引 2) 146624 条记录受到影响。 3)select本身不慢insert into很慢。 4) 完整的查询插入到 tbl_ItemPrice(CATALOGUEVERSIONID,SERIESNUMBER,TYPE,PRICEFIELD,PRICE, PRICEONREQUEST,recordid)...选择查询同上。
  • 编辑您的问题。如果没有这些信息,您的问题几乎毫无用处。
【解决方案2】:

您说问题在于 INSERT 而不是 SELECT。所以可能的罪魁祸首是(没有固定的顺序):

  • 触发器
  • 存储分配
  • 外键验证
  • 检查约束验证
  • i/o 瓶颈
  • 磁盘故障
  • 与其他会话争用

您必须使用哪些工具进行诊断取决于您使用的数据库产品(以及数据库的版本)。请在您的问题中包含这些详细信息。

【讨论】:

    【解决方案3】:

    tbl_TempCatalogue 表上是否有索引可以帮助数据库找到 F1=450 和 BATCHID=72 的行?

    否则,它可能需要扫描整个表才能找到它们。

    【讨论】:

      【解决方案4】:

      您的查询看起来不错..但我担心的是 newid() 函数,那里写的逻辑可能会影响性能,请尝试在没有 newid() 的情况下运行并查看 select 语句的执行时间..

      要解决此类问题,请按照以下步骤操作

      1. 仅查看 select 语句的执行时间
      2. 使用 select 查看插入语句的执行时间
      3. 查看不带 newid() 函数的 select 语句的执行时间

      在比较这些时间段后,您将能够找到问题所在的确切根本原因。之后请发布该时间段,以便我们尝试解决此问题。..

      【讨论】:

        猜你喜欢
        • 2013-07-24
        • 2015-08-19
        • 1970-01-01
        • 2020-11-09
        • 1970-01-01
        • 1970-01-01
        • 2019-08-02
        相关资源
        最近更新 更多