1
我正在解決SQL問題時遇到困難。我已經在互聯網上搜索過,沒有找到解決方案。子查詢的更新表執行起來非常慢
我在下面提供了一些上下文。我只包括我認爲相關的內容。
現有的表:
Group
id - has index
Admin
id - has index
Post
id - has index
group_id - has index
admin_id - has index
我的問題:
曾經有在軟件中創建一個帖子的時候,這不是填充admin_id
列的錯誤。這是可以的,因爲直到現在,假定每個組只有一個管理員。
我們現在增加了對每個組都有多個管理員的功能,因此需要填充admin_id
。軟件中的錯誤已得到解決,但我們必須回過頭來爲每個帖子填寫admin_id
。
我的解決/問題:
我在做什麼錯?以下是我的查詢。這實際上需要45分鐘才能運行。我找不到解決這個問題的方法。如果需要的話,我可以花45分鐘,但我真的很討厭它,而且我發現找到一種有效的方法來用SQL來做到這一點很瘋狂。
UPDATE posts
SET admin_id = X.admin_id
FROM (
SELECT
posts.group_id,
admins_groups.admin_id
FROM posts
JOIN groups ON posts.group_id = groups.id
JOIN admins_groups ON groups.id = admins_groups.group_id
) AS X
WHERE posts.group_id = X.group_id;
我到目前爲止試過的東西。
除了在網上淘和失敗...
,我讀了索引使寫入速度較慢,所以我已經取消了對posts.admin_id指數和看到的性能提升20%,但仍然是現在好了足夠。
但真正的問題是:如果你能通過連接獲得正確的'admin_Id',那麼爲什麼要更新'posts'表呢?只要你需要它,就加入它。 –
哇。我覺得自己像個白癡。您的解決方案奏效我根本不需要組,我根本不需要子查詢。如果你回答這個問題,我會選擇你的答案。 – tambykojak