这里有一些测试可以帮助你:
test1:
1.truncate table and don't delete indexes
2.insert data and check speed
3.check fragmentation
test2:
1.Truncate table
2.insert data and check speed
3.create indexes and check fragmentation
test1:
--insert data and check speed
delcare @id int=0
select current_timestamp;
while(@id<=1000000)
begin
insert into indextest
select @id,newid(),case when @id%10=0 then 1 else @id end;
set @id=@id+1
end
select current_timestamp;
--check fragmentation
--now check fragmentation
SELECT object_id, index_id, avg_fragmentation_in_percent, page_count
FROM sys.dm_db_index_physical_stats(DB_ID(‘AdventureWorks2016’), OBJECT_ID(‘indextest’), NULL, NULL, NULL);
test2:
----truncate table
truncate table indextest
--drop indexes
drop index idx_id on indextest;
drop index nci_idx on indextest;
---now insert data
delcare @id int=0
select current_timestamp;
while(@id<=1000000)
begin
insert into indextest
select @id,newid(),case when @id%10=0 then 1 else @id end;
set @id=@id+1
end
select current_timestamp;
--create index
create clustered index idx_id on indextest(id);
create non clustered index nci_idx on indextest(addres);
---check fragmentation:
SELECT object_id, index_id, avg_fragmentation_in_percent, page_count
FROM sys.dm_db_index_physical_stats(DB_ID(‘AdventureWorks2016’), OBJECT_ID(‘indextest’), NULL, NULL, NULL);
总结:
当索引已经存在时
插入数据耗时 3:23 秒,插入后出现碎片
当我们在数据加载后删除并重新创建索引时:
插入速度:**2:44 秒
**分片:
也就是说,我的测试取决于最佳日志增长设置、磁盘速度。此外,您可能不太担心碎片,碎片仅对范围扫描有影响。我建议根据您的表使用情况删除和重新创建索引。