如何快速查找一张大表的前面数据

公司生产上面有一张表,里面数据有:3486764条,每次想去查询最新的几条数据时总是很慢,以下为使用的语句:

select * from txn_fin_txn_log t order by t.id desc;

因为有order by语句会很慢,查询出来将近1分钟才能出来,有时候更长

经过脑海里想了之后,记得以前有位大师(具体记不清是哪位大师)有过一个案例,他对大数据查询时,先将其中最大的主键id查询出来,再做进一步处理,以下为我写的的sql:

select * from txn_fin_txn_log t where t.id > (
    select max(s.id) - 1000000 from txn_fin_txn_log s
) order by id desc;

此时查询100W条数据的最新数据0.547秒搞定,真是差别太大了。

后记:现在终于为何大师会先将表的主键id查询出来,再进行进一步查询,可能这种方案在对数据量比较少时,根本没有任何好处,反而工作量还多了,但是对大数据就不一定了;这个需要有些前提,id是递增的,而且查询的范围要控制的比较好,目前想到的分表是一个比较好的方法可以解决此问题

总结:任何程序没有绝对的对与错,只有相对的对与错,在适当的时候用适当的方法才是更好的;没有最好,只有更好!

原文地址:https://www.cnblogs.com/garinzhang/p/3481965.html