2016-11-21 131 views
1

我只是想问问这是与性能有关的好表。插入记录与聚集索引或没有聚集索引

我已经创建了具有

选项A

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

注意存储过程:基本的存储过程删除并重新创建表,然后在其上创建一个聚集索引。

而且我想,如果这个人应该比我创建了一个会更好。

选项B

1. TRUNCATE TABLE Statement 
2. INSERT INTO Statement 

注:与我的B选项就没有建立聚集索引,因为该表已经有一个聚集索引。

感谢您对大家谁都会要帮我这一个。

+1

你有没有比较两个(与执行计划),看看哪些更适合你? –

+2

当涉及到这样的问题时,答案几乎总是“取决于”,最好的方法是为自己做一些测试。您可能希望阅读[这篇文章是关于“哪个更快?”)问题](https://ericlippert.com/2012/12/17/performance-rant/) – GarethD

回答

0

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

编辑:我似乎越来越否决,所以认为我应该有资格这一点。注意“通常”一词 - 这并非总是如此,有几个人已经建议你只是尝试两种方法,并且看看自己哪个更快。

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

对于一个比喻为为什么,认为它好比写一篇指数为一本书。如果您按随机顺序编写本书,添加页面并随时更新索引,则必须频繁移动索引中的条目以腾出空间。如果您等待整本书的写入,那么您可以更有效地编写索引。