周期性地重复建立和删除索引,会有什么问题吗?

悬崖跳舞被人砍 2016-01-14 12:07:14
环境:MS SQL Server 2008
问题:我有两个库,在同一个服务器上。库A每天凌晨要按照时间戳删除一部分的数据,然后从另一个oracle库里抽取新数据插入,同时库A会通过复杂的联表查询生成一系列的视图。
新的数据完全插入到库A中的表后,又需要把库A的视图,完全地抽取到库B生成实体的表。这中间其实是一个对库A的查询过程和对库B的数据插入。
当新的数据插入到库B之后,会马上对库B进行一系列的密集复杂的查询。

也就是说,在库A和B上会周期性地依次进行删、增和查询的操作。这些操作都是通过job定时完成。

现今的问题是,由于数据量太多,两个数据库上的表又都没有索引,导致查询时间过长,已经渐渐不能接受了。因为我了解到,索引会加快查询速度,而降低数据插入、删除的速度,而两个库的增删查操作都是周期性且依次进行的,进而产生一个想法是,在查询数据时,在两个库的表上建立索引,当查询操作结束后,再删除索引,以准备下次的数据删、增操作。将这个建和删索引的操作也集成到job中,每天凌晨定时依次地执行。
想在论坛上问一下,这样做是否有可行性,是否会对我的项目产生实质性的帮助,以及可能会有什么副作用?
...全文
549 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 12 楼 giftsf 的回复:
[quote=引用 5 楼 kingofluo 的回复:] [quote=引用 3 楼 Tiger_Zhao 的回复:] 你处于什么原因要反复删索引/建索引? 一次性建好就行。
建索引:原因是要进行密集复杂地查询,想要提高查询速度 删索引:因为在查询之前需要对数据进行增删操作,为了保证增删数据的效率和速度,所以要删掉索引,来进行增删操作。 请看问题描述~[/quote] 删索引/再重建索引可以整理索引碎片 但为了保证增删数据的效率和速度删掉索引 如果聚集索引 你试过一亿的表删除掉再建一个要花多少时间吗? [/quote]OK 明白~
giftsf 2016-01-19
  • 打赏
  • 举报
回复
引用 5 楼 kingofluo 的回复:
[quote=引用 3 楼 Tiger_Zhao 的回复:] 你处于什么原因要反复删索引/建索引? 一次性建好就行。
建索引:原因是要进行密集复杂地查询,想要提高查询速度 删索引:因为在查询之前需要对数据进行增删操作,为了保证增删数据的效率和速度,所以要删掉索引,来进行增删操作。 请看问题描述~[/quote] 删索引/再重建索引可以整理索引碎片 但为了保证增删数据的效率和速度删掉索引 如果聚集索引 你试过一亿的表删除掉再建一个要花多少时间吗?
  • 打赏
  • 举报
回复
引用 1 楼 roy_88 的回复:
把每天做一次插入,频率改短一天几次,把数据先搬到SQL SERVER临时表,晚上再一次处理数据
这个恐怕不成,数据的抽取必须在最快时间进行,以便第二天能够在库B上查询到昨天最新的数据。分几次抽是不成的。后面两句不理解~意思是库A中不用视图 而使用临时表么?好像也是不可行的吧
中国风 2016-01-14
  • 打赏
  • 举报
回复
把每天做一次插入,频率改短一天几次,把数据先搬到SQL SERVER临时表,晚上再一次处理数据
Tiger_Zhao 2016-01-14
  • 打赏
  • 举报
回复
没问题。一次性建好索引就行。
既然你原先能正常使用,说明每天从oracle库里抽取的数据并不多。
你现在内存比数据库还大,添索引后的更新影响完全可以忽略。
就算有100G的数据,也不至于索引不能常驻内存(那样的索引要建得有多么不合理)。
放心用吧。
  • 打赏
  • 举报
回复
引用 7 楼 xdashewan 的回复:
哪 里 有 这 么 玩 的,“做“ ”数“ ”据“ ”库“ ”读“ ”写“ ”分“ ”离“ ”啊”,csdn什么破验证机制,竟然那么几个字里还有非法词组
读写分离这么大的改动,做不了~ 而且 源数据库是oracle的
  • 打赏
  • 举报
回复
引用 7 楼 xdashewan 的回复:
哪 里 有 这 么 玩 的,“做“ ”数“ ”据“ ”库“ ”读“ ”写“ ”分“ ”离“ ”啊”,csdn什么破验证机制,竟然那么几个字里还有非法词组
我查查看这个方法是否适用~
  • 打赏
  • 举报
回复
引用 6 楼 Tiger_Zhao 的回复:
你想太多了。 有索引反而提高删的速度; 对增的影响也基本可以忽略——除非你服务器的内存连G的数量级都不到,或者数据库大小已经到了10G的数量级。
服务器的内存是有32G,但是两个数据库的大小也各有了20多G
xdashewan 2016-01-14
  • 打赏
  • 举报
回复
哪 里 有 这 么 玩 的,“做“ ”数“ ”据“ ”库“ ”读“ ”写“ ”分“ ”离“ ”啊”,csdn什么破验证机制,竟然那么几个字里还有非法词组
Tiger_Zhao 2016-01-14
  • 打赏
  • 举报
回复
你想太多了。
有索引反而提高删的速度;
对增的影响也基本可以忽略——除非你服务器的内存连G的数量级都不到,或者数据库大小已经到了10G的数量级。
  • 打赏
  • 举报
回复
引用 3 楼 Tiger_Zhao 的回复:
你处于什么原因要反复删索引/建索引? 一次性建好就行。
建索引:原因是要进行密集复杂地查询
  • 打赏
  • 举报
回复
引用 3 楼 Tiger_Zhao 的回复:
你处于什么原因要反复删索引/建索引? 一次性建好就行。
建索引:原因是要进行密集复杂地查询,想要提高查询速度 删索引:因为在查询之前需要对数据进行增删操作,为了保证增删数据的效率和速度,所以要删掉索引,来进行增删操作。 请看问题描述~
Tiger_Zhao 2016-01-14
  • 打赏
  • 举报
回复
你处于什么原因要反复删索引/建索引?
一次性建好就行。

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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