SQL语句的瓶颈在哪里?
我正在尝试编写一个SQL(Sybase)查询,从数据库中获取电影院信息。当我运行下面的查询时,查询一直在运行。最后,大约5分钟后,我就放弃了。没有坏的/非法的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
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-我强烈建议你使用explicitJOIN
sysntax来避免这些类型的问题<代码>ANSI-92已经采用了20年,我认为这已经足够长了。。。