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条)