1

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

我有

 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

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

有什么办法可以让这更快吗?

4

2 回答 2

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
于 2013-04-09T09:50:02.400 回答
1

您可以查看执行计划并尝试优化您的查询,但通常您在遇到问题时会这样做,以便确定哪些部分需要很长时间。

将这个线程添加到:如何基于 EXPLAIN 计划优化 MySQL 查询

但正如所说,我不会尝试解决仍然不存在的问题,我实际上并没有看到您的查询有问题。

于 2013-04-09T09:39:41.613 回答