没必要那么麻烦,假设你的表是t1~t999,时间点是time_id,每个测试数据是value,每个表的时间点都是完全相同。要插入的表是T。 insert into T select t1.time_id 时间点,t1.value,t2.value.... from t1,t2...t999 where t1.time_id=t2.time_id and t1.time_id=t3.time_id ... and t1.time_id=t999.time_id;
TO nowait(独行天涯路)你提出的方法我回去会试一下。但是效率是不是会提高,还要看实验结果。目前的每条纪录,在有了时间点作纪录标识后,进行后面的更新,速度大约11秒一条——如果进行你提出的方法,我仍然不可避免的进行999次查询(这个当然不可避免),方法差别在于你的方法是一次插入,把所有的纪录混合到了一次执行,where语句很长;我把where分开执行。下周我会把实验结果写出来的。祝大家周末愉快!——同时期待新的解决思路的提供,分不够可以加:)独行天涯路,U will never walk alone!
update table1 set table1.a1=(select table2.value1 from table2 where table1.datatime=table2.datatime) table2可以是调度的表,也可以是倒过来的临时表。由于是inner join,建议是倒过来的表。两个表的time,table2.pid要有索引。 倒表一句话,更新一句话,应该比较简单。
经过周末的倒库测试,发现 solidpanther(╃╄╃我爱机器猫╄╃╄) 的方法很高效。 原来执行估算时间共需两月的 现在一天多就可以了 真是高效啊数据最终的倒入表A 结构如下:时间点 测点1 测点2 测点3 测点4 …… 测点999 年月日时分 年月日时分 年月日时分 年月日时分 ……具体的方法就是 update 测点1 select value from 测点1所对应的实际数据表 where A.时间点 = 测点1所对应的实际数据表.时间点看上去是更新了几万次 但是效率的却提高了 我感觉是因为从一个表取数据,select value from 相同的地方,所以就比原来从999个不同的表取值快些吧…… 内部的运行机制不适很清楚,回头一定要好好查查
我的数据来源就是(测试时间,测试数据)——每张表是一个测试点的数据,和bill9提出的差不多,呵呵!而且最终的目的表结构不是我们可以修改的,而是实际操作中对方提出的——很郁闷!
高手们提出些思路啊,谢谢了!
insert into T select t1.time_id 时间点,t1.value,t2.value.... from t1,t2...t999
where t1.time_id=t2.time_id
and t1.time_id=t3.time_id
...
and t1.time_id=t999.time_id;
等测试完以后,再来详述。
update table1 set table1.a1=(select table2.value1
from table2
where table1.datatime=table2.datatime)
table2可以是调度的表,也可以是倒过来的临时表。由于是inner join,建议是倒过来的表。两个表的time,table2.pid要有索引。 倒表一句话,更新一句话,应该比较简单。
原来执行估算时间共需两月的 现在一天多就可以了 真是高效啊数据最终的倒入表A 结构如下:时间点 测点1 测点2 测点3 测点4 …… 测点999
年月日时分
年月日时分
年月日时分
年月日时分
……具体的方法就是 update 测点1 select value from 测点1所对应的实际数据表 where A.时间点
= 测点1所对应的实际数据表.时间点看上去是更新了几万次 但是效率的却提高了
我感觉是因为从一个表取数据,select value from 相同的地方,所以就比原来从999个不同的表取值快些吧…… 内部的运行机制不适很清楚,回头一定要好好查查
感谢 独行天涯路 和 solidpanther(╃╄╃我爱机器猫╄╃╄) 的支持、指点!