我们的代码中有一个错误,它将错误的值缓存到last_order_id
(expected_previous_order)列。我正确编写的查询找到了正确的最后一个订单ID但对我们的数据集来说太慢了。
我想将此数据选择到另一个表中,但我不能,因为查询需要的时间太长
我在这里用一个较小的数据集设置了一个简单的例子。原始表有大约170k行。
在示例中:
EXPLAIN结果
修改
每次重新排序时,都会在order_artwork
表格中添加一个新条目,并引用original_artwork_id
和last_order_id
。
当前数据集中对last_order_id
的引用是错误的。
我需要更新所有记录以正确指出最后一个订单ID。
我这样做是为了找到每件艺术品并将其加入同一original_artwork_id
的前一个条目。然后我可以从最后一个条目中提取order_id来更新当前条目last_order_id
使用相同的original_artwork_id或当前行original_artwork_id =前一行id
加入当前行之前创建的上一行的当前行答案 0 :(得分:0)
我发现创建的时间列不可靠。所以我决定只使用相同的original_artwork_id找到最后一个最高订单ID。
创建具有更正值的表
CREATE TABLE order_artwork_two AS
select
d1.id,
d1.order_id,
max(d2.order_id) last_order_id,
d1.original_artwork_id
from order_artwork d1
left join order_artwork d2
ON d1.original_artwork_id = d2.original_artwork_id
and d1.order_id > d2.order_id
group by d1.original_artwork_id, d1.order_id;
为新表添加索引。否则更新会太慢
alter table order_artwork_two add primary KEY(id);
更新原始表格。
update order_artwork d1
left join order_artwork_two d2 on d2.id = d1.id
set d1.last_order_id = d2.last_order_id;