瑶风 2019-03-11 13:21 采纳率: 0%
浏览 723

大数据量Mysql查询后经过循环使用python分片

1 问题描述:
(1)使用mysql查询基础数据,这里只有三四个基础的查询条件,联了一个表,同时有limit分页了;
(2)之后经过一系列逻辑处理,在这些处理中又包含了很多sql查询,而且是在第(1)条查询出来的结果基础上查询,以前是先分页的,第(1)一次只查询了十条,第二步最多循环十次,但是现在的新逻辑是,查询出来后,经过(2)的处理,不满足筛选条件的数据remove掉,然后再返回最后剩下的数据
(3)由于每一页都会remove()掉部分数据,我曾经尝试定义全局变量,记录删除数据,但是只能得到我当前查询这一页删除了多少,无法获取总共删除了多少,而且每一页的数量都不一定是10条,一般来说是10条以下(因为会删除部分不符合筛选条件的数据),但是要求是要获取满足筛选条件的总数据量,而且需要正常分页
(4)于是我不用limit分页,直接取全量数据,然后再记录删除的数据量,使用切片手动分页,就能获取总数据了,每页也都是10条,但是循环次数过多,数据量稍微大一点儿,就需要49秒左右
2 部分相关代码:
(1)基础查询:

SELECT
op.order_id,
opc.order_code,
op.created_at AS create_time,
opc.departure_date,
opc.end_date,
opc.company,
opc.channel_id,
opc.retail,
opc.final_cost,
opc.has_pay,
opc.commission_price,
opc.commission_type,
opc.commission_value \
FROM
order_product_customize AS opc \
LEFT JOIN order_product AS op ON opc.order_product_id = op.order_product_id \
WHERE
{ 0 }
ORDER BY
opc.created_at DESC { 1 }

(2) 手动分页:

nextPage = limit_start+page_size
result['data_list'] = result['data_list'][limit_start:nextPage]
result['total_num'] = result['total_num'] - self.delNum

3 报错信息:
没有报错,只是执行时间极其长
一台比较好的机器,执行时间为27.72秒,本地执行时间接近40秒,无法上传图片

4 已经尝试过的办法
(1)记录删除次数再减去(因为每次都只查一页,只能获取当前页删除的条数)
(2)取符合筛选条件的全量数据(数据量太大,又有循环,导致速度极其慢)
(3)每次查20条左右数据,然后获取没删除的前10条,记录最后一条的id(动态分页,无法获取每一页第一条数据,无法保证20条经过筛选后还能剩下10条)

  • 写回答

1条回答

  • DarkAthena ORACLE应用及数据库设计方案咨询师 2022-01-14 15:17
    关注

    三年前的问题。。。
    看上去是一个数据分页的同时还要过滤的问题。
    一般来说,数据量比较大的话,不建议查到应用内存里再进行过滤,应该在sql层面就直接把数据过滤掉,如果一个sql去过滤速度慢,那就分多个sql来过滤,必要时可以借用临时表。

    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!