繁体   English   中英

sql查询花费太长时间

[英]sql query taking too long

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

  1. 我在tbl_TempCatalogue表上具有F1索引和BatchID
  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

谢谢

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

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

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

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

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

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

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

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

您说问题出在INSERT而不是SELECT。 因此,可能的罪魁祸首是(无固定顺序):

  • 触发器
  • 存储分配
  • 外键验证
  • 检查约束验证
  • I / O瓶颈
  • 有故障的磁盘
  • 与其他会议竞争

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM