赞
踩
方案一、直接通过union all连表查询,然后通过limit进行分页查询,如果连表过多,会报如下错误:
ERROR 23 (HY000) at line 1: Out of resources when opening file '/tmp/tbs.log' (Errcode: 24 "Too many open files")
解决方案详见:https://blog.csdn.net/rgb_rgb/article/details/41939973
需要使用ulimit修改linux的打开文件数 和 修改mysql的配置中的打开文件数
方案二、编写代码,汇总每张表的数据(如:时间戳、总条数...)和一定时间内的所有表的总条数(最多查询365张表)
如果不想每次查询都去统计一次数据,可以单独用一张表记录或者写入缓存记录
接下来,使用python简单示例一下分页查询
- if __name__ == '__main__':
- """
- 按日期分库分表:根据时间条件进行查询数据
- """
- # 模拟数据库的数据格式
- # 时间戳:每张日期表总条数
- data = [
- {1: 5},
- {2: 5},
- {3: 10},
- {4: 15},
- {5: 5},
- {6: 5},
- {7: 10},
- {8: 15},
- ]
-
- new_data = []
- offset = int(input('请输入一个20的倍数')) # 偏移量
- length = 20 # 每页显示的条数
-
- pos = 0 # 记录偏移值
- count = 0 # 累计条数
- flag = False
- for i in range(len(data)):
- for k, v in data[i].items():
- # print(k, v)
- pos += v
- if pos <= offset:
- continue
-
- if len(new_data) == 0:
- page_offset = 0 if pos - offset == v else v - (pos - offset)
- page_length = pos - offset
- else:
- diff = length - count
- page_offset = 0
- page_length = v if diff > v else diff
-
- new_data.append({
- k: [page_offset, page_length]
- })
- count += page_length
-
- if count == length:
- flag = True
- break
- if flag:
- break
-
- # 打印分页数据格式
- # 时间戳:[偏移量,条数]
- print(new_data)

运行结果:
- 请输入一个20的倍数20
- [{4: [0, 15]}, {5: [0, 5]}]
预计存储数据量最多十万条左右,没有必要去修改服务器的配置,所以暂时采用方案二去做分页查询
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。