【问题标题】:How to optimize mysql query.?如何优化mysql查询。?
【发布时间】: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


【解决方案1】:

您可以使用所有或两个或其中一个选项

1) 尝试对列进行索引 2) 为 WHERE 子句设置一些默认条件 3) 使用限制。

并使用“EXPLAIN”检查您的查询,这样您就可以优化您的查询 http://dev.mysql.com/doc/refman/5.0/en/using-explain.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-03
    • 2016-11-30
    • 1970-01-01
    • 2011-01-22
    • 2011-07-07
    相关资源
    最近更新 更多