我有简单的“插入...”查询,大约需要40秒才能执行。它只是从一个表中获取记录并插入另一个表中。
F1
表格上的BatchID
和tbl_TempCatalogue
上有索引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
由于
答案 0 :(得分:2)
如果您的表很大,您可能会受益于tbl_TempCatalogue表中F1和BATCHID的索引。目前尚不清楚您使用的DBMS,但大多数都有不错的工具来向您展示执行计划。如果您在大型表上进行全表扫描,则可能需要很长时间才能运行。
另外,你说“插入”很慢,但你只包括选择的代码。选择本身是否缓慢?
答案 1 :(得分:1)
tbl_TempCatalogue表上是否有索引可帮助数据库找到F1 = 450和BATCHID = 72的行?
否则,它可能需要扫描整个表才能找到它们。
答案 2 :(得分:1)
你的查询看起来很好..但是我关心的是newid()函数,那里写的那些可能达到性能的逻辑,请尝试在没有newid()的情况下运行并查看select语句的执行时间..
按照步骤
解决此类问题在比较这些时间段后,您将能够找到问题所在的确切根本原因。之后请发布这些时间段,以便我们尝试解决此问题。
答案 3 :(得分:1)
你说问题在于INSERT而不是SELECT。所以可能的罪魁祸首(没有固定的顺序):
您需要进行哪些诊断工具取决于您使用的数据库产品(以及哪个版本的数据库)。请在您的问题中包含这些详细信息。