0

データベースから映画館の情報を取得するための SQL (Sybase) クエリを作成しようとしています。以下のクエリを実行すると、クエリが実行され続けます。最終的に、5分ほど経った後、中止します。悪い/違法な 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

クエリで使用されているテーブル名やロジックについて心配する必要はありません。間違っていることや非効率なことを明らかにしていないかどうかだけを考えているだけです。3 つのテーブルすべてのカウントは次のとおりです。

  • theatre_mappings= 2,094,163
  • region_codes= 11,140,​​348
  • movie_summary= 6,437,782

前もって感謝します!

4

2 に答える 2

0

テーブルを他の2つに結合していないため、デカルトを生成しています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
于 2012-11-20T12:20:20.753 に答える
0

(RC/MS) エントリに対する TM エントリのデカルト積を作成しています。なりたいですか?

Sybaseは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
于 2012-11-20T12:19:45.370 に答える