zoukankan      html  css  js  c++  java
  • 分页场景SQL如何优化

    分页取数方式

    在 数据仓库中有一个重要的基础步骤,就是对数据进行清洗。比如数据源的数据如果以JSON方式存储,在mysql的数据仓库就必须将json中需要的字段提 取出来,做成单独的表字段。这个步骤用sql直接处理很麻烦,所以可以用主流编程语言(比如java)的json库进行解析。解析的时候需要读取数据,一 次性读取进来是不可能的,所以要分批读取(相当于分页了)。

    最初的实现方式就是标记住每次取数据的偏移量,然后一批批读取:

     

    这样的代码,在开始几句sql的时候执行速度还行,但是到后面会越来越慢,因为每次要读取大量数据再丢弃,其实是一种浪费。

    高效的实现方式,可以是用表中的主键进行分页。如果数据是按照主键排序的,那么可以是这样(这么做是要求主键的取值序列是连续的。假设主键的取值序列我们比较清楚,是从10001-1000000的连续值):

     

    就算数据不是按主键排序的,也可以通过限制主键的范围来分页。这样处理的话,主键的取值序列不连续也没有太大问题,就是每次拿到的数据会比理想中的少一些,反正是用在数据处理,不影响正确性:

     

    这样的话,由于主键上面有索引,取数据速度就不会受到数据的具体位置的影响了。

  • 相关阅读:
    PHP数组的升序降序函数
    overflow样式修改插件——jscrollpane
    li标签之间的空隙问题(转)
    纯CSS制作三角(转)
    图片放大插件——elevatezoom
    git常用命令笔记
    求数组子序列和最大值
    Vim快速入门
    C++求两个整数的最大公约数和最小公倍数
    实验楼-4-Linux文件权限
  • 原文地址:https://www.cnblogs.com/luodao1991/p/5100578.html
Copyright © 2011-2022 走看看