我正在使用以下查询将人员从视图迁移到我的数据库,这太慢了:
SELECT DISTINCT PI.VALUE ID
FROM PERSON_VIEW PERV
inner join PERSON_IDENT PI on PI.VALUE = PERV.IDENTITY
inner join PERSON PER on PER.ID = PI.EXTERNAL_ID
WHERE NOT EXISTS (SELECT RECORD_ID FROM PERSON_MIGR_DATA PMD
WHERE RECORD_ID = PERV.RECORD_ID)
AND NOT EXISTS (SELECT RECORD_ID FROM PERSON_MIGR_ERRORS
WHERE RECORD_ID = PERV.RECORD_ID)
Run Code Online (Sandbox Code Playgroud)
连接字段上有索引,但我必须更改此查询,因为它持续 15 分钟。表非常大。
所以。我有PERSON_VIEW-我从中读取了要迁移PERSON_MIGR_DATA的人员,PERSON_MIGR_ERRORS-迁移人员的ID ,以及- 在迁移过程中未通过验证的人员的记录 ID。
我认为, NOT EXIST 是瓶颈。但是如何进行此查询以使其更快?
您可以尝试使用一对左连接进行不匹配(而不是不存在)
SELECT DISTINCT PI.VALUE ID
FROM PERSON_VIEW PERV
inner join PERSON_IDENT PI on PI.VALUE = PERV.IDENTITY
inner join PERSON PER on PER.ID = PI.EXTERNAL_ID
LEFT JOIN PERSON_MIGR_DATA PMD ON PMD.RECORD_ID = PERV.RECORD_ID
LEFT JOIN PERSON_MIGR_ERRORS PME ON PME.RECORD_ID = PERV.RECORD_ID
where PMD.RECORD_ID is null and PME.RECORD_ID is null
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2490 次 |
| 最近记录: |