SQL Index on Multiple tables,可以吗?

标签 sql indexing

一直在寻找解决方案,

转到 (1) 或 (2) 以跳过说明,
首先,我将解释情况。

我公司已经升级了我们的ERP。系统,我的主要工作是创建公司其他人使用的列表,我从这个系统数据库中获取所有数据
在升级过程中,我们将一些数据转换为与新版本匹配,其中一些被留下,一些未被篡改,直接导出到新数据库,
它在单独的服务器上,
基本上它是成功的,新的ERP。系统按预期工作,
然而我的很多 list 都被打破了,
我的列表使用的数据丢失/partly_missing/all_there

好的,所以问题是我需要从旧数据库中丢失数据,好的,新旧数据库上的联合应该能够做到这一点,但是我不想要重复的记录,“转换到新数据库的数据也存在于旧数据库”,因此可能存在两个字段“它们确实存在,我试过了”

所以2.我的解决方案版本

我缺少主键“iseries 数据库”,所以我将 feilds 的组合组合成一个 uniqe 键,“解释我是如何做到的需要很长时间”
然而,它最终让我在两个数据库上使用联合 View ,确保没有记录存在两次,

(1)
所以这就是我现在得到的,
新旧表数据组合的 View
所有这些都建立在“uniqe”键上的检查......
每次我需要受升级影响的数据时,我都必须对每个表运行昂贵的查询,“有些使用这些 View 超过 40 次”
(问题1)我如何“经济高效”从两个不同的模式/数据库中获取数据并将其绑定(bind)在一起?

(2)
我能想到给我这种性能的唯一一件事就是制作索引而不是我构建的这些 View ,但是直到现在我还没有找到任何关于如何做的信息,
(问题2)我可以在两个表上创建索引吗?

我的数据库是 as/400 - iseries
但是我对针对任何数据库类型的解决方案感兴趣,
我对资源非常灵活

:编辑:
用于创建 View 的代码稍作修改,

SELECT

CTCONO,
CTDIVI,
CTSTCO,
CTSTKY,
CTLNCD,
CTTX40,
CTTX15,
CTPARM,
CTTXID,
CTRGDT,
CTRGTM,
CTLMDT,
CTCHNO,
CTCHID

FROM NEWDB.CSYTAB
UNION
SELECT * FROM OLDDB.CSYTAB

WHERE ( CTCONO,CTDIVI,CTSTCO,CTSTKY,CTLNCD ) NOT IN
(
SELECT A.CTCONO,A.CTDIVI,A.CTSTCO,A.CTSTKY,A.CTLNCD FROM NEWDB.CSYTAB A, OLDDB.CSYTAB B
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

)

最佳答案

创建一个新表来存储昂贵查询的值,然后如果在新数据库中有记录时,您通常总是忽略旧数据。然后在其他表更新时添加一些触发器来更新这个新表。

也许,一个更好的问题是提供您的架构,而当前昂贵的查询然后要求人们帮助使其更快。

编辑:现在您已经发布了您的表格,我看到您可以改进的一件事,将查询的第二部分设为:

...
UNION
SELECT * FROM OLDDB.CSYTAB B
WHERE 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 } 的单一索引,那么它应该比您目前获得的性能要好得多。

关于SQL Index on Multiple tables,可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7553099/

相关文章:

sql - 为什么表上的 CONNECT BY LEVEL 返回额外的行?

sql - SQL 如何获取一组项目的平均值?

sql - SQL Management Studio 中的对象名称无效

pandas - 如何在 Pandas 中将索引转换为日期时间?

database - 数据库索引文件实现

Python Postgres 按多列排序然后创建新索引

mysql - GROUP BY - 排序前后分组

c# - 在 .Net 中测试复杂的 T-SQL 脚本?

MySQL 部分字段加密

java - 通过 RestHighLevelClient 连接时,Elastic search : java.net.ConnectException