Sql server MS SQL Server:如何优化插入查询

Sql server MS SQL Server:如何优化插入查询,sql-server,optimization,Sql Server,Optimization,有没有任何方法可以像下面这样优化简单的插入查询 INSERT master_table SELECT * FROM increment 执行计划为表格扫描(13%)->表格插入(87%) 我能做些什么使它执行得更快呢?您几乎没有选择扫描整个表,因为您需要所有数据,但是您可以做一些事情 在master_表上删除索引(如果有) 使用插入主表(tablock). 这将使插入尽可能快地插入到目标表中,并取消读取表以执行插入的并行执行,这是2016年添加的一项功能。因为您似乎想要选择所有列(se

有没有任何方法可以像下面这样优化简单的插入查询

INSERT master_table
    SELECT * FROM increment
执行计划为
表格扫描
(13%)->
表格插入
(87%)


我能做些什么使它执行得更快呢?

您几乎没有选择扫描整个表,因为您需要所有数据,但是您可以做一些事情

  • master_表上删除索引(如果有)
  • 使用
    插入主表(tablock).

  • 这将使插入尽可能快地插入到目标表中,并取消读取表以执行插入的并行执行,这是2016年添加的一项功能。

    因为您似乎想要选择所有列(
    select*
    )和所有行(no
    WHERE
    子句);要改善这一点,你真的无能为力。SQL Server将需要读取整个源表—所有行、所有列—这通常是一个完整的表扫描(或聚集索引扫描)。实际上,您对此无能为力。您忽略了在insert语句完成后添加索引的成本。您是否也建议删除主键和所有自然键?当然,重新创建删除的索引是有成本的,但是根据我的经验,净收益通常超过在索引存在的情况下插入表的成本,特别是在必须为聚集索引对数据进行排序的情况下。和往常一样,您必须测试每一个,以确定最佳组合。