大概每分钟会产生1-10w条数据,每条数据大概100字段,都是vchar(20)类型。
对这些数据,我需要执行50个select来过滤、归并然后把过滤、归并的结果,(每个select结果只会有1条数据),insert到相应的50个表中。不知道怎么做效率能高点。
我现在的想法用sqlloader每分钟把1-10w条数据导入临时表,然后做select和insert操作,操作完后truncate临时表。但我不知道sqlloader是否能支持这么频繁的交换。或者有什么更好的方法?
也不知道做50个select和50个insert操作会有多少i/o。有没有更好的办法?
还不知道truncate临时表和用内存表哪个效率更好点。有没有更好的办法?
如果都不行的话。只能在内存中做过滤和归并了。然后直接做insert操作!55希望得到大家的帮助啊!谢谢啊
对这些数据,我需要执行50个select来过滤、归并然后把过滤、归并的结果,(每个select结果只会有1条数据),insert到相应的50个表中。不知道怎么做效率能高点。
我现在的想法用sqlloader每分钟把1-10w条数据导入临时表,然后做select和insert操作,操作完后truncate临时表。但我不知道sqlloader是否能支持这么频繁的交换。或者有什么更好的方法?
也不知道做50个select和50个insert操作会有多少i/o。有没有更好的办法?
还不知道truncate临时表和用内存表哪个效率更好点。有没有更好的办法?
如果都不行的话。只能在内存中做过滤和归并了。然后直接做insert操作!55希望得到大家的帮助啊!谢谢啊
为什么想用临时表呢?也许你所说的临时表不是真正意义上的temporary table吧.因为如果用session级别的话,那么你的数据一进去,会话结束就没了.如果是事物级的话,那就不用说了.
这样的操作很吃力吗?
如果是永久表的话,使用nologging属性较好。
假如50个表的数据源都是同一张表,用insert all select是比较节省资源的。
每分钟产生1-10w条件数据,而且第每数据是100字段,我认为这个表负载太大了,简直是海量数据;
你可以直接产生数据到50个表中,这样你就省了50个select来过滤、归并的操作,而且这样做数据分布到多个表,查询起来会快很;
直接去掉那个大表,直接产生数据到50个小表里
我说的临时表不是temporary table的意思啊!是想用sqlloader倒入一张表永久表,临时存放每分钟的数据。用于统计。然后这分钟的数据统计完毕,就把统计结果放入不同的结果表,然后就删除这个临时表里面的内容。否则每分钟几十万数据这个表就会太大!
现在就是想优化[
每分钟都把数据sqlloader到数据库bigtemp表。然后select bigtemp有50个select(每个select只有1个结果)
将结果insert到50个小表]
这个操作
不知道 ---,但是segments会比原来大得多,可能成倍的增加.看你的并行度了. --这样会很快,但是对于空间要求比较大.
这两句是什么意思啊