sql查询花费的时间太长

sql查询花费的时间太长,sql,sql-server-2005,optimization,Sql,Sql Server 2005,Optimization,我有一个简单的“insert-into..”查询,执行这个查询大约需要40秒。它只是从一个表中获取记录并插入到另一个表中 我在tbl\u TempCatalogue表中的F1和BatchID上有索引 146624条记录受到影响 select本身不慢,insert-into慢 完整的查询是: insert into tbl_ItemPrice (CATALOGUEVERSIONID,SERIESNUMBER,TYPE,PRICEFIELD,PRICE, PRICEONREQUEST,rec

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

  • 我在
    tbl\u TempCatalogue
    表中的
    F1
    BatchID
    上有索引
  • 146624条记录受到影响
  • 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
    

    谢谢

    如果您的表很大,您可能会受益于tbl_TempCatalog表中F1和BATCHID上的索引。不清楚您使用的是什么DBMS,但大多数DBMS都有合适的工具来向您展示执行计划。如果在一个大的表上执行完整的表扫描,则可能需要很长时间才能运行


    另外,您说“insert-into”很慢,但您只包括select的代码。select本身慢吗?

    如果您的表很大,您可能会受益于tbl_TempCatalog表中F1和BATCHID上的索引。不清楚您使用的是什么DBMS,但大多数DBMS都有合适的工具来向您展示执行计划。如果在一个大的表上执行完整的表扫描,则可能需要很长时间才能运行


    另外,您说“insert-into”很慢,但您只包括select的代码。select本身是否很慢?

    tbl_TempCatalog表上是否有索引帮助数据库查找F1=450和BATCHID=72的行


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

    tbl_TempCatalog表上是否有索引帮助数据库查找F1=450和BATCHID=72的行


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

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

    要解决此类问题,请执行以下步骤

  • 请参见select语句的执行时间
  • 请参阅带有select的insert语句的执行时间
  • 请参阅不带newid()函数的select语句的执行时间

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

    您的查询看起来很好。。但我关心的是newid()函数,其中写入的逻辑可能会影响性能,请尝试在不使用newid()的情况下运行,并查看select语句的执行时间

    要解决此类问题,请执行以下步骤

  • 请参见select语句的执行时间
  • 请参阅带有select的insert语句的执行时间
  • 请参阅不带newid()函数的select语句的执行时间

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

    您说问题在于插入而不是选择。因此,可能的罪犯是(没有固定顺序):

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

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

    您说问题在于插入而不是选择。因此,可能的罪犯是(没有固定顺序):

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

    您必须使用什么工具进行诊断将取决于您使用的数据库产品(以及数据库的版本)。请在您的问题中包括这些细节。

    我认为您还应该检查/提供:1。涉及多少记录2。如果您在sql server上进行选择,需要多长时间。tbl_目录上有索引吗?表中有多少行?查询检索到的总数占多大比例?您是否验证了select返回所有内容的速度很快,而不仅仅是响应时间?我认为您还应该检查/提供:1。涉及多少记录2。如果您在sql server上进行选择,需要多长时间。tbl_目录上有索引吗?表中有多少行?查询检索到的总数中有多大比例?您是否验证了select返回所有内容的速度很快,而不仅仅是响应时间?很抱歉没有添加详细信息1)我在F1上有索引,在tbl_TempCatalog表上有BatchID 2)146624条记录生效。3) 选择本身不慢,插入速度慢。4) 将完整查询插入tbl_ItemPrice(CatalogEversionId、序列号、类型、PRICEFIELD、PRICE、PRICEONREQUEST、recordid)…选择与上述相同的查询。编辑您的问题。如果没有这些信息,你的问题几乎毫无用处。很抱歉没有添加详细信息1)我在F1上有索引,在tbl_TempCatalog表上有BatchID 2)146624条记录生效。3) 选择本身不慢,插入速度慢。4) 将完整查询插入tbl_ItemPrice(CatalogEversionId、序列号、类型、PRICEFIELD、PRICE、PRICEONREQUEST、recordid)…选择与上述相同的查询。编辑您的问题。没有这些信息,你的问题几乎毫无用处。