一张表1000w条数据, 每天生单会insertOrUpdate 50w条,
需求期望要select出生单时间是昨天的所有数据做处理.因为数据有点多,所以想用limit分批取.
生单时间做了索引,
方案1.
select * from tbl where order_time > '上次最后一条数据的order_time' limit 1000
这个问题是, 如果第1000条和第1001条的order_time相同,会把第1001条数据丢掉.
方案2.
2-1. 先通过生单时间索引, 找到最小id和最大id,
2-2. select * from tbl where id >= minId and id <= maxId id > 上次的最大id limit 1000
2-3. 2-2的结果在代码中通过生单时间过滤
改走id索引.
这个问题是, 最坏情况下, minid=表的最小id, maxId=表的最大id, 会扫全表,中间很多无效查询
方案3.
临时表,没研究过
一次性50w条数据放临时表的成本大吗?
--
FROM 114.252.54.*