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


    公司生产上面有一张表,里面数据有: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是递增的,而且查询的范围要控制的比较好,目前想到的分表是一个比较好的方法可以解决此问题

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

  • 相关阅读:
    mock数据
    关于适配各种浏览器的图片预览。
    闭包
    兼容性 适配
    递归 使用callee
    webservice的model层命名空间不同的问题
    删除右键菜单中的Git
    windows server core 设置shell 及切换
    设置共享用户名密码
    Windows Remote Shell(WinRM)使用介绍
  • 原文地址:https://www.cnblogs.com/garinzhang/p/3481965.html
Copyright © 2020-2023  润新知