sql查询花费的时间太长
我有一个简单的“insert-into..”查询,执行这个查询大约需要40秒。它只是从一个表中获取记录并插入到另一个表中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
tbl\u TempCatalogue
表中的F1
和BatchID
上有索引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语句的执行时间 要解决此类问题,请执行以下步骤
比较这些时间段后,您将能够找到问题所在的确切根本原因。之后,请发布这些时间段,以便我们尝试解决此问题。您的查询看起来很好。。但我关心的是newid()函数,其中写入的逻辑可能会影响性能,请尝试在不使用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)…选择与上述相同的查询。编辑您的问题。没有这些信息,你的问题几乎毫无用处。