当前位置:   article > 正文

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_rgb/article/details/41939973

需要使用ulimit修改linux的打开文件数 和 修改mysql的配置中的打开文件数

方案二、编写代码,汇总每张表的数据(如:时间戳、总条数...)和一定时间内的所有表的总条数(最多查询365张表)

如果不想每次查询都去统计一次数据,可以单独用一张表记录或者写入缓存记录

接下来,使用python简单示例一下分页查询

  1. if __name__ == '__main__':
  2. """
  3. 按日期分库分表:根据时间条件进行查询数据
  4. """
  5. # 模拟数据库的数据格式
  6. # 时间戳:每张日期表总条数
  7. data = [
  8. {1: 5},
  9. {2: 5},
  10. {3: 10},
  11. {4: 15},
  12. {5: 5},
  13. {6: 5},
  14. {7: 10},
  15. {8: 15},
  16. ]
  17. new_data = []
  18. offset = int(input('请输入一个20的倍数')) # 偏移量
  19. length = 20 # 每页显示的条数
  20. pos = 0 # 记录偏移值
  21. count = 0 # 累计条数
  22. flag = False
  23. for i in range(len(data)):
  24. for k, v in data[i].items():
  25. # print(k, v)
  26. pos += v
  27. if pos <= offset:
  28. continue
  29. if len(new_data) == 0:
  30. page_offset = 0 if pos - offset == v else v - (pos - offset)
  31. page_length = pos - offset
  32. else:
  33. diff = length - count
  34. page_offset = 0
  35. page_length = v if diff > v else diff
  36. new_data.append({
  37. k: [page_offset, page_length]
  38. })
  39. count += page_length
  40. if count == length:
  41. flag = True
  42. break
  43. if flag:
  44. break
  45. # 打印分页数据格式
  46. # 时间戳:[偏移量,条数]
  47. print(new_data)

运行结果:

  1. 请输入一个20的倍数20
  2. [{4: [0, 15]}, {5: [0, 5]}]

预计存储数据量最多十万条左右,没有必要去修改服务器的配置,所以暂时采用方案二去做分页查询

 

参考:https://blog.csdn.net/yanfangphp/article/details/78124067?utm_medium=distribute.pc_relevant_bbs_down.none-task-blog-baidujs-1.nonecase&depth_1-utm_source=distribute.pc_relevant_bbs_down.none-task-blog-baidujs-1.nonecase

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/49475
推荐阅读
相关标签
  

闽ICP备14008679号