我们程序的需求是 从其他系统采集数据到我们系统中,然后再进行处理。
每天晚上凌晨先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,有没有什么其他好办法来提高效率。