select task_id as id from (select @rownum:=@rownum+1 as num,t.* from mode t,( select @rownum:=0) r where state in ('1','

动态 未结 0 66
小小草
小小草 LV1 2023年9月23日 23:40 发表
如果state字段已经添加了索引,可以进一步优化这个查询语句: ``` SELECT task_id AS id FROM ( SELECT @rownum:=@rownum+1 AS num, t.* FROM ( SELECT * FROM mode WHERE state IN ('1', '2') AND time <= '2022-11-11 23:59:59' ORDER BY time ) t, (SELECT @rownum:=0) r ) a WHERE num > 1 AND num <= 10; ``` 优化的思路和上一个问题类似,先对state和time字段进行过滤,并按照time字段排序,然后再使用变量进行行号计算。最后在外层查询中根据行号筛选出需要的数据。 同样需要注意的是,如果mode表中的数据量很大,可能会导致排序操作比较耗时。此时可以考虑在time字段上添加索引来加速排序操作。
收藏(0)  分享
相关标签: 智能问答
问题没解决?让AI助手帮你作答 AI助手
0个回复
  • 消灭零回复