优化查询:自己加入表

时间:2013-04-09 09:34:00

标签: mysql

我想在一个查询中获取一个表的最后两行作为新数据和以前的数据

我得到了

 select tbl.x , tbl2.x as last_x 
 from tbl left join tbl tbl2 ON tbl.id!= tbl2.id
 order by tbl.id desc , tbl2.id desc limit 1

它工作正常,但我认为它可能会在大数据库中变慢

有没有办法让它更快?

2 个答案:

答案 0 :(得分:2)

LIMIT应该在基本子查询中工作,因此以下内容可能更有效

SELECT Sub1.x , Sub2.x as last_x 
FROM (SELECT x FROM tbl ORDER BY tbl.id DESC LIMIT 1) Sub1
CROSS JOIN (SELECT x FROM tbl ORDER BY tbl.id DESC LIMIT 2, 1) Sub2

答案 1 :(得分:1)

您可以查看execution plan并尝试优化查询,但通常在遇到问题时执行此操作,以便确定哪些部分需要很长时间。

将此主题点击:How to optimise MySQL queries based on EXPLAIN plan

但是,由于我不会尝试解决仍然不存在的问题,我实际上并没有看到你的查询存在问题。