mysql分页分表_mysql分表后 如何分页 (总共160个表1500万数据)

面对160个分表和1500万数据,原始的UNION ALL方式导致性能瓶颈。解决方案是利用分表条件(按域名分表)减少检索范围,建立目录表以确定需查询的特定表。在没有特殊排序的情况下,逐表读取并结合每个表的记录数进行分页,避免全表扫描。此外,维护每个表的记录数在目录表中,以便于快速定位分页数据。
摘要由CSDN通过智能技术生成

mysql分表后,有160个表,有1500万数据,要怎么做分页列表?

之前是想用union all合并160个表的结果集。。但直接卡的数据都出不来。。

请问这里应该怎么做分页,谢谢~~~

回复讨论(解决方案)

你这是自己做的分表,那么分表条件是什么呢?

如果分页的结果不能通过分表条件框定范围,那你的分表是失败的

不是说不能用 union,而是 union 的不是全部,而是经分表条件筛选后的部分表

你这是自己做的分表,那么分表条件是什么呢?

如果分页的结果不能通过分表条件框定范围,那你的分表是失败的

不是说不能用 union,而是 union 的不是全部,而是经分表条件筛选后的部分表

徐版主好~我表里的数据主要字段是URL地址,有1600个域名,我是根据域名分成了160个表。

你这是自己做的分表,那么分表条件是什么呢?

如果分页的结果不能通过分表条件框定范围,那你的分表是失败的

不是说不能用 union,而是 union 的不是全部,而是经分表条件筛选后的部分表

我的sql语句是这样的 (字段不多且都有用就用的*号):

你这是自己做的分表,那么分表条件是什么呢?

如果分页的结果不能通过分表条件框定范围,那你的分表是失败的

不是说不能用 union,而是 union 的不是全部,而是经分表条件筛选后的部分表

我的sql语句是这样的 (字段不多且都有用就用的*号):

select * from t1 union all select * from t2 union all select * from t3.....union all select * from t160

既然你是按域名分表的,那么也就是按域名检索了

所以可以想象到,如果一个域名不在否一个表中的话,那么这个表是不需要参与检索的

这样一来你的检索范围不就缩小了很多了吗?

当一个表中包含有若干个不同域名时,你需要建一个目录表,指明某一类域名在某个表中

检索时先查目录表,得到可能在哪些表中,然后再在这些表中查找

如果你使用 mysql 提供的分表功能,那么就要简单多了

既然你是按域名分表的,那么也就是按域名检索了

所以可以想象到,如果一个域名不在否一个表中的话,那么这个表是不需要参与检索的

这样一来你的检索范围不就缩小了很多了吗?

当一个表中包含有若干个不同域名时,你需要建一个目录表,指明某一类域名在某个表中

检索时先查目录表,得到可能在哪些表中,然后再在这些表中查找

如果你使用 mysql 提供的分表功能,那么就要简单多了

这个域名和表名的对应关系我有做,但是现在打开这个分页列表,应该是所有表所有域名的数据,再分页,不是某部分域名或某部分表。

你这个有特殊排序条件吗?没有的话直接逐表读取所需数据就行了。

你这个有特殊排序条件吗?没有的话直接逐表读取所需数据就行了。

没排序,只要把所有数据列出来就好了,是160个表1500万数据都得弄出来做分页。。。逐表读取的话不行吧?!

要是整体的分页显示那就更简单了

1、每个表的记录数是已知的,应在每次发生变化时记录到目录表中

2、无论是否排序(如果排序只是表的次序不同)至多会 union 两个分表

如假定共3个分表,记录数分别为 90,120,80 总记录数为 290

设分页是每页显示40条,则

第1页 表一的 1 到 40

第2页 表一的 41 到 80

第3页 表一的 81 到 90 + 表二的 1 到 30

第4页 表二的 31 到 70

第5页 表二的 71 到 110

第6页 表二的 111 到 120 + 表三的 1 到 30

.....

计算起来非常简单

要是整体的分页显示那就更简单了

1、每个表的记录数是已知的,应在每次发生变化时记录到目录表中

2、无论是否排序(如果排序只是表的次序不同)至多会 union 两个分表

如假定共3个分表,记录数分别为 90,120,80 总记录数为 290

设分页是每页显示40条,则

第1页 表一的 1 到 40

第2页 表一的 41 到 80

第3页 表一的 81 到 90 + 表二的 1 到 30

第4页 表二的 31 到 70

第5页 表二的 71 到 110

第6页 表二的 111 到 120 + 表三的 1 到 30

.....

计算起来非常简单

谢谢徐版主耐心回答。

f68f2add0b68e4f9810432fce46917b7.png

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值