首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么“从可源中选择*到可目标”比“插入到可目标选择*从可源源中插入”要快

为什么“从可源中选择*到可目标”比“插入到可目标选择*从可源源中插入”要快
EN

Database Administration用户
提问于 2011-07-08 09:37:53
回答 1查看 5.2K关注 0票数 10

这个题目就是问题所在。我很想知道答案。有人告诉我

select是在简单恢复模型数据库中登录的最小值.我一点也没参与其中。

摘录自微软:

SELECT...INTO的日志记录量取决于数据库的有效恢复模型。在简单恢复模型或大容量日志恢复模型下,批量操作被记录到最少。使用最小日志记录,使用选择的…语句可以比创建表然后使用INSERT语句填充表更有效。

寻求帮助

谢谢

EN

回答 1

Database Administration用户

回答已采纳

发布于 2011-07-08 12:14:50

有几个想法/理论:

选择进入..。让RDBMS根据原始表的顺序确定排序顺序。如果插入到现有表中,则可能需要进行排序以匹配群集索引或非聚集索引(Es)。

没有索引-当您的SELECT INTO...数据库管理系统确切地知道没有预先存在的索引要更新。

不存在争用-因为您要插入的表不存在,所以Server不需要担心行级锁定或争用处理。其他任何东西都不能引用您创建的表,因为它不存在。

尽管如此,还有其他方法可以非常快地插入到桌子上。

  • 如果可能,请确保群集索引键匹配。这意味着没有即时排序。
  • 禁用所有非聚集索引。不言自明。
  • 将恢复模式设置为简单,并将跟踪标志610设置为ON。在目标表上使用TABLOCK提示,在源表上使用NOLOCK提示。

例如,假设tablea和tableb具有相同的聚集索引:

代码语言:javascript
复制
INSERT INTO TableB WITH (TABLOCK)
SELECT <Columns>
FROM TableA WITH (NOLOCK)

根据我的经验,这比使用SELECT INTO...之后创建聚集索引要快。请注意,这也可以在已经包含数据的表上工作,这是一个更有用的场景。

编辑:

下面是MS中关于Server 2008中数据加载性能的非常详细的白皮书。

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

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

复制
相关文章

相似问题

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