mysql按日期分库分表后如何分页查询
方案一、直接通过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_rg
·
方案一、直接通过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]}]
预计存储数据量最多十万条左右,没有必要去修改服务器的配置,所以暂时采用方案二去做分页查询
更多推荐
已为社区贡献1条内容
所有评论(0)