您的位置:首页 > 数据库

分页场景SQL如何优化

2016-01-04 23:03 253 查看
分页取数方式

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

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



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

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



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



这样的话,由于主键上面有索引,取数据速度就不会受到数据的具体位置的影响了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: