|
一直在寻找解决方案,
. x! l, s2 o& R) p请转到(1)或(2)跳过说明,首先我会说明情况。3 D1 I: j% O. n+ |/ P
我的公司升级了我们erp。系统,我的主要工作是为公司其他人创建列表,我从系统数据库中获取所有数据,我们将一些数据转换为新版本,有些被遗忘,有些没有篡改,直接导出到新数据库,在单独的服务器上,基本上成功,即新的ERP。系统按预期工作,但我的许多列表已经损坏,我的列表使用的数据丢失/partly_missing / all_there
1 {7 h0 ^1 l8 B: O5 ~好的,所以问题是我在旧数据库中需要的数据丢失了。好的,新旧数据库的结合应该能够做到这一点,但我不想重复记录。转换为新数据库的数据也存在于数据库中。旧数据库,所以可能有两个字段:他们做了,我试了。
$ ^# d+ V. d {' ^6 F& a所以2.我的解决方案版本: S6 p, v/ y# v" G. n6 A
我缺少主键. U# A- N4 p y. M+ z8 a% Y, U3 N
iseries数据库,所以我去找一个组合来制作一个唯一的按钮,花太多时间来解释我是如何做到的,但最后我使用了两个数据库的联合视图,以确保两次没有记录,$ O4 [. n- C' U
(1)这就是我现在得到的。旧表数据和新表数据的组合视图是通过/ r5 L. ~. G0 e
uniqe检查并构建键。…每次我需要升级数据时,我都必须在每个表上运行昂贵的查询,有些表使用这些视图超过40次(问题1)我如何从两个不同的模式/数据库中获取数据并绑定成本效益?7 O! T' y3 ]- \. q6 |0 ?
(2)我唯一想给我的性能就是创建索引而不是这些视图,但直到现在,我还是找不到任何关于如何操作的信息。(问题2)我可以创建一个索引和两个表。5 k/ G O/ R* D' K* I2 N4 ^
我的数据库是as / 400-iseries,但我对任何类型的数据库解决方案都很感兴趣,我对资源非常灵活
6 g1 p0 \/ @ S* I) \3 a:EDIT:用于创建视图作修改的代码,1 ~, b3 e& _% ]* S/ x: P- W
SELECTCTCONO,CTDIVI,CTSTCO,CTSTKY,CTLNCD,CTTX40,CTTX15,CTPARM,CTTXID,CTRGDT,CTRGTM,CTLMDT,CTCHNO,CTCHIDFROM NEWDB.CSYTABUNIONSELECT * FROM OLDDB.CSYTABWHERE ( CTCONO,CTDIVI,CTSTCO,CTSTKY,CTLNCD ) NOT IN(SELECT A.CTCONO,A.CTDIVI,A.CTSTCO,A.CTSTKY,A.CTLNCD FROM NEWDB.CSYTAB A,OLDDB.CSYTAB BWHERE A.CTCONO = B.CTCONOAND A.CTDIVI = B.CTDIVIAND A.CTSTCO = B.CTSTCOAND A.CTSTKY = B.CTSTKYAND A.CTLNCD = B.CTLNCD)
6 r( O; _* v- w' j' W. _6 k7 m3 V 解决方案:
0 T2 A! j, B# i+ x3 b3 ?/ C' c0 m 制作一个新表来存储您昂贵的查询的值,然后如果新数据库中有记录,则通常总会忽略旧数据。然后,只需添加一些触发器即可在其他表更新时更新此新表。
$ o" I4 ?2 X2 I1 m9 S也许,更好的问题是提供你的模式,然后昂贵的查询要求人们帮助它更快。- D$ o4 o% s% r8 x ]/ H
编辑:现在你已经发表了表格,我看到你可以改进一件事,把查询的第二部分变成:
! v2 p3 I5 v5 d; C d...UNIONSELECT * FROM OLDDB.CSYTAB BWHERE NOT EXISTS( SELECT TOP 1 1 FROM NEWDB.CSYTAB A WHERE A.CTCONO = B.CTCONO AND A.CTDIVI = B.CTDIVI AND A.CTSTCO = B.CTSTCO AND A.CTSTKY = B.CTSTKY AND A.CTLNCD = B.CTLNCD )假如你在NEWDB.CSYTAB中有一个跨{CTCONO,CTDIVI,CTSTCO,CTSTKY,CTLNCD}索引,那么它的性能应该比目前的性能好得多。 |
|