2009-09-18 4 views
0

GridSQL을 사용하여 SQL 패턴 INNER JOIN (SELECT 발생)이 발생할 때마다 성능 문제가 발생합니다. 따라서이 모든 쿼리를 두 개로 다시 작성하는 것이 좋습니다. 질의, 하나는 정확한 select 문을 사용하여 임시 테이블을 생성하고 다른 하나는 임시 테이블과 조인하므로 패턴은 INNER JOIN temp_table (...)이됩니다.어떤 경우에는 INNER JOIN (SELECT ... 임시 테이블을 사용하여 다시 쓸 수 없음

어떤 경우에는 작동하지 않습니까? 의심 스럽지만이 질문에 대한 답변이 없기를 바랍니다.)

답변

1

외부 테이블의 필드를 참조 할 때 서브 테이블을 임시 테이블로 쉽게 분리 할 수없는 경우가 있습니다.

"... INNER JOIN (SELECT ...")에 대해 다음과 같은 필드를 참조해야하므로이 문제 (또는 가능한 경우이를 생각해 보지 못했습니다.)가 의심 스럽습니다. 조인 기준의 첫 번째 테이블

1

임시 테이블이 쿼리 속도를 높이 지 않는다고 생각합니다. 대신 쿼리를 최적화해야합니다. 상황이 당신이 할 수 있습니다 : 다른 레코드를 결합 내부 이전

  • 필터 레코드가
  • 적절한 인덱스

정의 -Pavel 경우는 내부 조인 할 수있는

+0

SQL에 대한 쿼리 최적화 프로그램이 수동으로 수행하려는 단계를 수행하고 있기 때문에 속도가 향상되지 않을 수도 있습니다. – Mark

+0

쿼리 최적화 프로그램은 많은 작업을 수행하지만 실제로 수행 할 수 있습니다. 모든 쿼리를 최적화하지 마십시오. 먼저 대량의 레코드를 결합한 다음 필터를 연결하는 대신 모든 레코드 집합을 필터하는 것이 좋습니다. 더 많은 SQL 쿼리 최적화 프로그램이 인덱스를 생성하지 않습니다! –

+0

MySQL, PostgreSQL 또는 그와 비슷한 것에 대해 말하면 동의합니다. GridSQL은 여러 개의 노드가 있고 쿼리 플래너가 언급 된 두 가지만큼 성숙하지 않은 특별한 경우입니다. 이 작업을 수행 할 경우의 성능 효과를 알 수 있습니다 (쿼리 당 10-20 분에서 30 초 미만). – David

0

설정 (선택 ... 임시 테이블을 사용하여 다시 쓸 수 없음

임시 테이블로 대체 할 쿼리가 큰 결과를 초래할 수있는 경우 임시 테이블을 사용하지 않아야합니다. 그것을 생성하는 오버 헤드는 가능한 모든 이득을 무효화합니다.