2016-11-11 7 views
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 % 증가했습니다,하지만 지금은 여전히 ​​좋은 충분히.

+0

하지만 진짜 문제는 : 당신이 할 수있는 경우 join을 통해 올바른'admin_Id'를 얻고, 왜'posts' 테이블을 업데이트해야합니까? 필요할 때마다 가입하십시오. –

+0

와우. 나는 바보처럼 느껴진다. 솔루션이 효과적이었습니다. 나는 그룹을 전혀 필요로하지 않았고 서브 쿼리를 전혀 필요로하지 않았다. 질문에 대답하면 답을 선택하겠습니다. – tambykojak

답변

1

는 지금까지 내가 말할 수있는, 당신은 groups 테이블을 필요로하지 않으며, 당신은 FROM 절에 업데이 트의 목표 테이블을 반복해서는 안 :

UPDATE posts 
    SET admin_id = admins_groups.admin_id 
FROM admin_groups 
WHERE posts.group_id = admins_groups.group_id