分库分表后如何分页查询 分库分表如何分页查询pagehelper

分库分表后如何分页查询?

方法:1.如果只是为了分页,可以考虑这种分表,就是表的id是范围性的,且id是连续的,比如第一张表id是1到10万,第二张是10万到20万,这样分页应该没什么问题。

2.如果是其他的分表方式,建议用sphinx先建索引,然后查询分页,我们公司现在就是这样干的

延伸阅读

如何使用使用分页查询来适应挖掘海量数据呢?

数据挖掘各类算法中,常常需要遍历整个数据库(表)。现实中的数据库可能十分大,往往不可能通过一个简单的Select *的方式遍历提取数据表内的所有元组。直接用Select * 的方式存在两大问题,一是Select *过后,可能要等很久数据库才能将所有信息提交完毕,第二是得到的结果可能是很大,远远超过内存的限制。

现在各种主流的数据库都支持了分页查询的方式。

以Oracle为例,通过rownum关键字可以获取指定的行区间。

比如:

Select * from XX。TABLE1 where rownum = 50;

以MySQL为例,提供了limit关键字,更加方便获取中间某区间的行数据。

比如: Select * from TABLE1 limit 50,100。 MySQL的limit关键字用起来比Oracle要方便一些。不过各个数据库的分页查询的速度我倒没有研究过,网上听一些高手们说,Oracle提供的分页查询效率要高一些。

Hibernate这样的数据持久层提供的分页查询,可以屏蔽掉各个不同的数据库之间具体SQL实现差异。

Hiberante这样的数据持久层工具一大好处就是可以屏蔽掉不同数据库的之间的某些细节差异。

分页查询在不同的数据库上实现的SQL不一样,所以要统一,最好使用Hibernate这样的工具。

Query q = session。createQuery(“from Cat as c”);

q。

setFirstResult(50);

q。setMaxResults(100);

List l = q。list();

网上到处都可以搜寻到关于Hibernate内部实现分页查询的解读的文章。

可以看到,Hibernate内部也是通过rownum,limit这些关键字来实现分页的。

oracle数据库怎么实现分页?

您好:oracle查询分页可分为两种情况,一种使用的是rownum ,另外一种则是使用 row_number() over(order by column_name desc)。

1.使用rownum分页查询,可用以下方式:

select t2.* from (select t1.*,rownum as rn from table_name t1 where 1=1 and rownum <= page * page_size) t2 where t2.rn > (page – 1) * page_size;2.使用 row_number() over() 分页查询select t2.* from (select t1.*,row_number() over(order by column_name desc) as rn from table_name t1 where 1=1 )t2 where t2.rn > (page-1)* page_size and t2.rn <= page * page_size;这种方式,也是可以分页的。希望能帮助您!

如何使用使用分页查询来适应挖掘海量数据呢?

分页查询一般 DBA 想到的办法是在某个(如ID,create_time)字段上加组合索引。这样条件排序都能有效的利用到索引,性能迅速提升。

因为如果当 LIMIT 子句变成 “LIMIT 1000000,10” 时,你会抱怨:我只取10条记录为什么还是慢?

要知道数据库也并不知道第1000000条记录从什么地方开始,即使有索引也需要从头计算一次。

出现这种性能问题,多数情形下是程序员偷懒了。在前端数据浏览翻页,或者大数据分批导出等场景下,是可以将上一页的最大值当成参数作为查询条件的。

SQL 重新设计如下:

SELECT * FROM 表WHERE create_time > ‘2017-07-04 09:00:00’ ORDER BY create_time limit 10;这样查询时间基本固定,不会随着数据量的增长而发生变化。

版权声明