在mysql中优化复杂查询

时间:2011-01-15 14:07:47

标签: mysql optimization

我在这里有两个问题,但我立即问他们,因为我认为他们是相互关联的。

我正在处理一个复杂的查询(多个连接+子查询),表格也非常庞大(此表中约有2,00,000条记录)。

需要此查询的一部分(LEFT JOIN)来查找在与第一个表的主键关联的所有记录中的cetain列中具有第二低值的记录。现在我已经分离了这一部分并思考 -

SELECT id FROM tbl ORDER BY `myvalue` ASC LIMIT 1,1;

但是有一种情况,如果表中只有1条记录,它必须返回该记录而不是NULL。所以我的第一个问题是如何为此编写查询?

其次,考虑到表的大小以及即使在创建索引之后它已经运行的时间,我理解为了实现上述部分而为其添加任何更多的复杂性可能会显着影响查询时间。

我无法分解连接,因为我需要获取ORDER BY子句的一些列(应用程序有一个选项可以按这些列对结果进行排序,上面的列“myvalue”就是其中之一)

解决这个问题的方法是什么?

由于

1 个答案:

答案 0 :(得分:0)

这样的事情可能会起作用

COALESCE(
  (SELECT id FROM tbl ORDER BY `myvalue` ASC LIMIT 1,1), 
  (SELECT id FROM tbl ORDER BY `myvalue` ASC LIMIT 0,1))

它从提供的列表中选择第一个非空值。

至于查询的复杂性,发布整个内容,以便我们可以看看它。