select * from? ? ? order where? ?user_id =11 and status = 1 and id > 10000 limit 10
2个索引 user_id 、? id
? 偶然会查询的慢,且不容易复现?
id大的时候,mysql评估后使用id更快;但是实际上会多几次IO查询
(总共1000W条数据,>999.9W,limit 从倒数1000条查询。。假如这1000条只有最后1条是复核条件的,那么:就会从磁盘扫描出这1000条数据,然后比较user_id。 假如10条数据是1个page, 1000条数据要100个page,也就是100次磁盘IO,因此使用id索引会慢)
强制使用 user_id 索引
查询未归档的订单(未归档的数据量,因此status创建了索引能有效筛选出数据)
select * from order where? status =10? order by? ?update_time
2个索引 status? , update_time
使用 update_time 索引,能避免排序;但是,会增加磁盘IO
select * from order where? status =10? order by? update_time+0
update_time +0 后,就无法利用?update_time 索引(因为 对字段做了函数操作)
业务中慎用 order by ,会引起 选错索引