【发布时间】:2013-12-06 12:47:17
【问题描述】:
我有两个具有相同结构的表。这两个表都包含大量记录。对于某些记录生成,我必须获取两个表的数据。有时查询中会有 where 条件,有时不会有任何 where条件,因为 where 条件是根据给定的用户输入构建的。因此,如果用户没有输入,则不会有 where 子句,因此将获取整个记录。为此,我正在获取两个表记录然后合并它们。
示例 tbl 结构
table_1
column_1 | column_2 | column_3 | column_4 | column_5
table_2
column_1 | column_2 | column_3 | column_4 | column_5
所以我使用以下查询从表中获取结果
select t1.* from table_1 as t1 inner join table_3 as t3 on t1.column = t3.column where condition
union
select t2.* from table_2 as t2 inner join table_3 as t3 on t2.column = t3.column where condition
order by column
请注意,可能会或可能不会应用 where 条件。where table_3 包含 table_1 和 table_2 中常见的记录详细信息。我有替代方法可以使用某些东西而不是 union 来提高性能。?像 join。?
所以我的问题是,当我在没有任何 where 条件的情况下运行此查询时,它不会执行,因为表包含大量记录。我还需要两个表中的数据。非常感谢任何优化技术。
提前谢谢..
【问题讨论】:
-
crores是什么意思? -
1 千万 = 1000 万。
-
两个子查询中是否存在重复行?你需要过滤掉它们吗?如果没有,请使用
UNION ALL而不是UNION。 -
是的,可能有。这就是我不使用 UNION ALL 的原因。但这不是问题。性能是我的问题
-
我的意思是
UNION DISTINCT导致了性能问题。它必须遍历所有结果以寻找重复项以过滤掉,当有大量结果时,这会很慢。
标签: mysql database performance join union