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

不要担心查询中使用的表名或逻辑,我只是​​想知道是否有任何明显的事情表明我做错了或效率低下。以下是所有三个表的计数:

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

提前致谢!

4

2 回答 2

0

您正在创建 TM 条目到 (RC/MS) 条目的笛卡尔积。你想成为?

我认为 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 回答
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
于 2012-11-20T12:20:20.753 回答