首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >插入表中的绩效问题

插入表中的绩效问题
EN

Database Administration用户
提问于 2021-12-16 14:32:05
回答 1查看 283关注 0票数 0

我正在编写一个存储过程,它的主要目的是插入到表中。

过程将通过证书签名,并发送电子邮件通知。

过程将接受用户定义的table-variable作为参数,并将其内容插入持久表中。

以下是几个问题:

  1. 插入到持久表中会导致表锁升级吗?是否对每1次过程执行允许插入的行数限制到一定限制有任何意义?比如说100,200,500行等等-为了避免lock_escalation事件?
  2. 与表变量(如统计数据)相比,临时表有一些好处。在存储过程中,首先将用户定义的表变量的内容插入#temp表,然后再插入到目标表中,这有意义吗?,或者我们可以跳过#temp表,直接从表变量插入到持久表中,这样就不会有任何性能缺陷了?
  3. 在插入过程中采取了哪些锁?对于插入,还有其他性能考虑吗?

更新:添加了简化的过程代码:

代码语言:javascript
复制
create procedure InsertIntoTable (@_TableData TableData readonly)
as begin

-- lets use intermediate temp table
drop table if exists #InsertIntoTable

create table #InsertIntoTable (
    column1             bigint,
    column2             varchar(50),
    column3             smallint,
    column4             datetime,
    column5             tinyint,
    column6             datetime,
    column7             varchar(500)
)

-- insert from table-variable into temp table
insert into #InsertIntoTable (column1, column2, column3, column4, column5, column6, column7)
select 
    column1, 
    column2, 
    column3, 
    column4, 
    column5, 
    column6, 
    column7
from @_TableData

-- let's do the actual insert
insert into Database..Table (column1, column2, column3, column4, column5, column6, column7)
select 
    column1, 
    column2, 
    column3, 
    column4, 
    column5, 
    column6, 
    column7
from #InsertIntoTable 

end
EN

回答 1

Database Administration用户

发布于 2021-12-22 21:00:01

由于需要先填充表变量,然后将其传递给存储过程,除非该过程比您发布的要做的更多,那么为什么不直接填充表呢?跳过使用表变量和sproc?

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/305042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档