truncate有索引的表和没有索引的表速度一样吗?

ifvlr 2015-01-14 05:40:15
我们程序的需求是 从其他系统采集数据到我们系统中,然后再进行处理。
每天晚上凌晨先truncate掉我们系统中的表,然后采集当天的数据到数据库。采集方式是用ctl控制文件方法导出db文件再把db文件导入我们数据库的方法,不是直接insert。
采集到我们系统中的表有20张,数据量为1000W以上的大概有八张,我把这20张表称为原始表。我们用这20张原始表通过SQL查询语句与对应的业务需求做成10张报表(结果表)。
因为有几张表数据量很大,所以查询起来的时候速度很慢,所以想到了建立索引的方式来提高效率。

insert into 结果表1 select col1,col2,col3... from 原始表1,原始表2 where XXX and XXX....

上面是我们生成报表的的类似语句。
那么问题来了:
1,我所了解的索引一般是建立在不常变更的表上面的,但是我们的表每天都会被truncate,这样是不是会影响效率?truncate有索引和没索引的表速度一样么?
2,虽然我们的数据不是用insert到数据库的,导入数据会因为表有索引会对导入速度有影响么?顺便问下,如果insert到数据库,因为存在索引,是不是效率很低?
3,有没有什么其他好办法来提高效率。
...全文
530 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
benluobo 2015-01-26
  • 打赏
  • 举报
回复
1 truncate 属于物理层的断开表结构文件与表数据文件的关系,有没有索引对该操作没有影响 2 索引会影响导入数据,建议先导入所有数据后再建立索引
自然80 2015-01-26
  • 打赏
  • 举报
回复
引用 4 楼 biandongfeng 的回复:
索引会导致插入数据变慢,tuncata估计影响不大,它将将表drop之后再重建的,关于楼上每次删除索引再加上我认为也不合适,因为你加索引的时候照样也是要费很多时间的
找个试试就知道了
biandongfeng 2015-01-23
  • 打赏
  • 举报
回复
索引会导致插入数据变慢,tuncata估计影响不大,它将将表drop之后再重建的,关于楼上每次删除索引再加上我认为也不合适,因为你加索引的时候照样也是要费很多时间的
自然80 2015-01-23
  • 打赏
  • 举报
回复
固定的脚本 机器反复运行就行了
ifvlr 2015-01-22
  • 打赏
  • 举报
回复
引用 1 楼 nearsun 的回复:
1,truncate没索引的表快 2,索引会降低表导入速度 3,把文件放在在数据库服务器上用数据库自带工具导入(如果能保证逻辑正确,导入前删掉索引 触发器 主键之类的,导完之后 在建索引触发器 主键)
每次都删除索引再建立索引,岂不是很麻烦么?如果我不删除索引,truncate掉数据后再导入的数据会被索引关联起来么?
自然80 2015-01-19
  • 打赏
  • 举报
回复
1,truncate没索引的表快 2,索引会降低表导入速度 3,把文件放在在数据库服务器上用数据库自带工具导入(如果能保证逻辑正确,导入前删掉索引 触发器 主键之类的,导完之后 在建索引触发器 主键)

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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