分区表的insert问题

骑着蜗牛去爬山 2017-06-30 09:00:53
建立了一个分区表tb id自增,vl varchar,不加索引
然后
insert into tb(vl)
select newid() from #T --#T 有2048行
GO 500
--耗时10s


给id加非聚焦索引
上面的语句
耗时46s

我是不是哪里整错了?
...全文
773 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouyuehai1978 2017-06-30
  • 打赏
  • 举报
回复
看了半天,这个和分区表有啥关系?
二月十六 2017-06-30
  • 打赏
  • 举报
回复
CREATE TABLE tb(
id INT IDENTITY(1,1),
vl VARCHAR(100)
)


--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([id] INT)
Insert #T
SELECT number FROM master..spt_values WHERE type='p'
Go
--测试数据结束



insert into tb(vl)
select newid() from #T --#T 有2048行
GO 500

13秒

删除数据
TRUNCATE TABLE tb


创建非聚集索引
create nonclustered index inx_tb_test ON tb(id)


27秒


我觉得有索引肯定会拖慢插入速度的,因为插入的时候也要建立索引,肯定会耗时的,而且如果是唯一索引之类的还要去进行比较。所以得进行取舍,查询速度快了,插入慢了;也可以考虑,先插入数据再建立索引……
  • 打赏
  • 举报
回复
引用 1 楼 appetizing_fish1 的回复:
这是正常的吧, 加索引只是为了提高查询速度, 但插入,更新的同时要维护索引.
如果是唯一索引,插入之前要先去表中查询是否已存在,然后在插入,肯定会耗时,但也不至于耗时这么多吧! 再说我这个索引是建在id自增上的。理论上来说就算检查那检查速度也很快才对啊!
顺势而为1 2017-06-30
  • 打赏
  • 举报
回复
这是正常的吧, 加索引只是为了提高查询速度, 但插入,更新的同时要维护索引.

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧