我想要捕獲其值已根據任何更新/插入修改的日期時間列更改的所有行。SQL:優化聯合查詢以獲取更新/插入的行
有一個父表和幾個子表。
我使用UNION來做到這一點,但它很慢。我有什麼選擇?我怎樣才能更好地構建查詢以在更短的時間內運行?
Tables -
ParentT - Rowid(PK),column1,last_update
ChildT1 - column1,last_update,parent_rowid(FK to ParentT.Rowid)
ChiltT2 - column1,last_update,parent_rowid(FK to ParentT.Rowid)
ChildT3 - column1,last_update,parent_rowid(FK to ParentT.Rowid)
查詢:
SELECT Rowid FROM ParentT
WHERE Rowid IN (
SELECT Rowid FROM ParentT pT WHERE pT.last_update > somedatetime
UNION
SELECT Parent_rowid FROM ChildT1 cT1 WHERE cT1.last_update > somedatetime
UNION
SELECT Parent_rowid FROM ChildT2 cT2 WHERE cT2.last_update > somedatetime
UNION
SELECT Parent_rowid FROM ChildT3 cT3 WHERE cT3.last_update > somedatetime
)
對於我的數據,聯盟執行比UNION ALL更好。 – user2276910
ParentT表和Child表上的索引是什麼? –
如果您能夠提供有利於進一步分析的執行計劃 –