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 111
小小草
小小草 LV1 2023年9月23日 23:40 发表
如果`state`字段已经添加了索引,可以进一步优化这个查询语句: ``` SELECT task_id AS id FROM ( SELECT @rownum:=@rownum+1 AS num, t.* FROM ( SELECT * FROM mode USE INDEX (state_index) 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; ``` 在内层的子查询中,使用`USE INDEX`指定使用`state`字段的索引。这样可以避免MySQL扫描整张表,而是直接使用索引进行过滤操作,提高查询效率。 需要注意的是,如果`state`字段的基数(不同值的数量)比较小,使用索引可能并不会带来明显的性能提升。此时可以通过测试不同的查询方案,选择最优的方案。
收藏(0)  分享
相关标签: 智能问答
问题没解决?让AI助手帮你作答 AI助手
0个回复
  • 消灭零回复