SQL语句的瓶颈在哪里?

SQL语句的瓶颈在哪里?,sql,optimization,sybase,sql-execution-plan,Sql,Optimization,Sybase,Sql Execution Plan,我正在尝试编写一个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

我正在尝试编写一个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
不要担心查询中使用的表名或逻辑,我只是想知道是否有任何明显的错误或效率低下的地方。以下是所有三个表的计数:

  • 剧院映射
    =2094163
  • 地区编码
    =11140348
  • 电影摘要
    =6437782

提前谢谢

您正在创建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

它生成笛卡尔坐标系,因为您没有将
theatre\u映射
表连接到其他两个。。在没有看到您的模式的情况下,我无法确定,但我怀疑您需要以下内容:

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

你有这个
tm交叉连接(rc.region\u code\u id=ms.region\u code\u id上的rc内部连接ms)
这真的正确吗?或者是否有一个字段应用于将
tm
连接到
rc
,或将
tm
连接到
ms
?另外,请注意,如果使用显式的
JOIN
语法,那么犯这些错误会变得更加困难。(如果确实是错误的话)谢谢@StevieG-你搞定了。@orionTurtle-我强烈建议你使用explicit
JOIN
sysntax来避免这些类型的问题<代码>ANSI-92已经采用了20年,我认为这已经足够长了。。。