2012-11-20 3 views
0

데이터베이스에서 영화관 정보를 가져 오기 위해 SQL (Sybase) 쿼리를 작성하려고합니다. 아래 쿼리를 실행하면 쿼리가 계속 실행됩니다. 결국 5 분 정도 지나면 그냥 중단합니다. 나쁜/불법 SQL은 없다. 단지 이 느리다.! 이 SQL 문이 병목 현상을 일으키는 위치는 어디입니까?

SELECT 
    TM.type_prefix + 
     right('00000000' + convert(varchar, TM.showing_id), 8) + 
     right('0000' + convert(varchar, TM.theatre_id), 4) as data_id 
FROM 
    theatre_times..theatre_mappings TM, 
    theatres..region_codes RC, 
    title_summaries..movie_summary MS 
WHERE 
    TM.scheme_id = 512 AND 
    RC.region_code_id = MS.region_code_id 

내가 틀리거나 비효율적으로하고있어 분명 아무것도 이 있다면 난 그냥 궁금 해서요, 쿼리에 사용 된 테이블 이름 또는 로직에 대해 걱정하지 마십시오. 여기에 수는 세 테이블에 있습니다 : 사전에

  • theatre_mappings = 2094163
  • region_codes = 11140348
  • movie_summary = 6437782 개

감사합니다!

+1

당신은 (INNER가 RC.region_code_id = MS.region_code_id ON 밀리 가입 RC)이 ...'TM 크로스가 가입이를'정말인가요 옳은? 아니면'tm'을'rc'에,'tm'을'ms'에 조인하는데 사용해야하는 필드가 있습니까? 또한, 명시 적'JOIN' 구문을 사용하면 이러한 실수를하기가 훨씬 더 어려워진다. * (실제로, ** ** 실수입니다.) * – MatBailie

답변

0

에 해당 그것의 당신이 당신의 스키마를 보지 않고 다른 두 ..에 theatre_mappings 테이블에 합류하지 않을 때문에 데카르트을 생산, 내가 확실히 말할 수는 없지만, 난 당신이 같은 필요 의심 :

SELECT 
    TM.type_prefix + 
     right('00000000' + convert(varchar, TM.showing_id), 8) + 
     right('0000' + convert(varchar, TM.theatre_id), 4) as data_id 
FROM 
    theatre_times..theatre_mappings TM, 
    theatres..region_codes RC, 
    title_summaries..movie_summary MS 
WHERE 
    TM.scheme_id = 512 AND 
    TM.region_code_id = RC.region_code_id -- Extra join 
    RC.region_code_id = MS.region_code_id 
+0

Thanks @StevieG - 당신이 그것을 못 박았습니다. –

+1

@orionTurtle - 나는 이러한 유형의 문제를 피하기 위해 명시 적으로'JOIN' sysntax를 사용하도록 강력히 권합니다. 'ANSI-92'는 20 년의 입양 기간을 거쳤습니다. – MatBailie

0

(RC/MS) 항목에 TM 항목의 카디 전 곱을 만듭니다. 너는되고 싶어?

내가베이스를 생각은 ANSI 92 SQL 구문을 지원하므로 SQL이

FROM 
    theatre_times..theatre_mappings TM, 

    theatres..region_codes RC 
      inner join title_summaries..movie_summary MS 
      on RC.region_code_id = MS.region_code_id 
WHERE 
    TM.scheme_id = 512 
관련 문제