优化方案(大方向):索引覆盖
分析原因:
1、回表:二级索引,查询列没有被索引覆盖,它获取到二级索引树上存的主键id值,然后再拿id值,通过主键索引树获取到要查询的数据。
*主键索引树,叶子节点存储的是行数据
*二级索引树,叶子节点存储的是主键id值
2、丢弃数据:limit 100,10。它会先查询到110行,然后丢弃前100条数据,拿到最后10条数据。
优化方法:
索引覆盖 :阻止回表操作
SELECT device_record_time,device_name,device_unique_code FROM device_record_merge
WHERE device_unique_code = 'F51002104120097' DESC LIMIT 531400,100;
SELECT d.* FROM device_record_merge d JOIN (
SELECT id FROM device_record_merge WHERE device_unique_code = 'F51002104120097' LIMIT 531400,100) a ON d.id=a.id
推荐书籍:高性能MySQL