for循环与mysql的分页查询

这两天写了一个定时任务,关于查询表中快过期的卡,发送短信提醒,在查询中,因为生产上的数据数十万条,数据量大,如果直接一下子查出来,会对数据库造成很大的压力,用到分页查询,按照正常逻辑,查询表中总数量,然后根据当前页以及每页数量,循环对数据库进行查询; //分页查询,每次查询1000条数据 int pageSize = 1000;//每页数量 int page = 1;//定义总页数
摘要由CSDN通过智能技术生成

这两天写了一个定时任务,关于查询表中快过期的卡,发送短信提醒,在查询中,因为生产上的数据数十万条,数据量大,如果直接一下子查出来,会对数据库造成很大的压力,用到分页查询,按照正常逻辑,查询表中总数量,然后根据当前页以及每页数量,循环对数据库进行查询;

		//分页查询,每次查询1000条数据
		int pageSize = 1000;//每页数量
		int page = 1;//定义总页数
		int offset;//当前页起始数
		int rowCount;//当前页结束数
		List<GiftCard> list = null;
		List<Integer> userIdList = new ArrayList<Integer>();
		//得到总页数
		if(giftCardCount > 0){			
			if(giftCardCount%pageSize==0){
				page=(int) (giftCardCount/pageSize);
			}else{
				page=(int) (giftCardCount/pageSize+1);
			}
		}
		//查询出还有三天且绑定了用户的优选卡信息
		for (int i = 1; i < page + 1; i++) {			
			if(page == 1){//即将过期账号查询只有一页时
				offset = 0;
				rowCount = (int) giftCardCount;
				list = giftcardDAO.getGiftCardThreeDaysDue(rowCount,offset,currentTim
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于需要分页查询的情况,一种解决方法是通过使用 LIMIT 关键字来限制查询结果的数量,再结合 OFFSET 关键字来指定查询结果的起始位置。 对于每次查询的数量限制为 5000 且小于 32000 的情况,可以使用循环来处理。具体的做法是,首先查询出总的记录数,然后根据每次查询的数量进行循环,每次查询一段数据,直到查询到所有的数据为止。 下面是一个示例的 SQL 查询语句: ```sql -- 假设表名为 table_name,需要查询的字段为 field1, field2 -- 每次查询 5000 条记录,查询结果按照 id 升序排列 -- 查询的起始位置从 offset 开始,总共查询 count 条记录 SELECT field1, field2 FROM table_name ORDER BY id ASC LIMIT 5000 OFFSET offset ``` 其中,offset 和 count 可以根据每次循环的查询次数进行计算。具体的实现可以参考以下的 Python 代码: ```python import pymysql conn = pymysql.connect(host='localhost', port=3306, user='root', password='123456', database='test') cursor = conn.cursor() # 查询总的记录数 cursor.execute('SELECT COUNT(*) FROM table_name') total_count = cursor.fetchone()[0] # 每次查询的数量 page_size = 5000 # 计算需要查询的次数 query_times = total_count // page_size + (1 if total_count % page_size > 0 else 0) # 循环查询数据 for i in range(query_times): offset = i * page_size # 查询数据 cursor.execute(f'SELECT field1, field2 FROM table_name ORDER BY id ASC LIMIT {page_size} OFFSET {offset}') # 处理查询结果 results = cursor.fetchall() for row in results: # 处理每条记录 pass # 关闭连接 cursor.close() conn.close() ``` 注意,在实际应用中,需要根据具体的场景和数据量进行调整。对于较大的数据量,可能需要考虑使用分布式查询等更高效的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值