【问题标题】:Insert Record on a Table with Clustered INDEX or without a Clustered INDEX在具有聚簇索引或不具有聚簇索引的表上插入记录
【发布时间】:2017-04-04 15:54:21
【问题描述】:

我只是想问在性能方面哪个更好。

我创建了一个存储过程,它有

选项 A

1. DROP TABLE Statement
2. SELECT INTO Statement
3. CREATE CLUSTERED INDEX

注意:基本上存储过程会删除并重新创建表,然后在其上创建一个 CLUSTERED INDEX。

我正在考虑这个是否应该比我创建的更好。

选项 B

1. TRUNCATE TABLE Statement
2. INSERT INTO Statement

注意:使用我的选项 B 将不会创建 CLUSTERED INDEX,因为该表已经有一个 CLUSTERED INDEX。

感谢所有愿意帮助我解决这个问题的人。

【问题讨论】:

  • 您是否比较了两者(与执行计划),看看哪个更适合您?
  • 当涉及到此类问题时,答案几乎总是“视情况而定”,而找出答案的最佳方法是为自己做一些测试。您不妨阅读this article about "Which is faster?" questions

标签: sql-server tsql indexing


【解决方案1】:

在插入数据后创建索引通常更好。

编辑:我似乎被否决了,所以我想我应该稍微限定一下。注意“一般”这个词——这并不总是正确的,有几个人已经建议你两个都试一下,自己看看哪个更快。

但作为一般经验法则,这是正确的。加载大量数据时的标准做法(如果您担心性能,我认为这是给定的)是删除或禁用表上的索引,加载数据,然后重建索引。

对于为什么的类比,可以将其想象为为一本书编写索引。如果您以某种随机顺序编写本书、添加页面并随时更新索引,您将不得不经常在索引中的条目之间移动以腾出空间。如果你等到整本书都写完,那么你可以更有效地编写索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 2018-06-18
    • 2015-07-04
    • 1970-01-01
    • 2013-08-16
    • 1970-01-01
    • 2021-12-14
    相关资源
    最近更新 更多