我正在尝试编写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 提前致谢!
答案 0 :(得分: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
答案 1 :(得分: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