mysql 效率低_MYSQL order by排序导致效率低小优化

4703c704ea48cb46eeaf6c0b02473352.png

有一个主表left join 同一个小表两次分页语句,因为order by 导致执行时做排序,从执行计划中Using filesort ,以及profile中creating sort index 耗时可以看出。

5c2830e477542e4ef31c01d00fdd586d.png

b5c8f7c5bedc7a14736a10a556569245.png

从trace文件可以看出filesort的计算:

"join_execution": {

"select#": 1,

"steps": [

{

"filesort_information": [

{

"direction": "desc",

"table": "`topxxx` `t`",

"field": "create_date"

}

] /* filesort_information */,

"filesort_priority_queue_optimization": {

"limit": 20,

"rows_estimate": 2302749,

"row_size": 264,

"memory_available": 4194304,

"chosen": true

} /* filesort_priority_queue_optimization */,

"filesort_execution": [

] /* filesort_execution */,

"filesort_summary": {

"rows": 21,

"examined_rows": 216594,

"number_of_tmp_files": 0,

"sort_buffer_size": 5712,

"sort_mode": ""

} /* filesort_summary */

}

] /* steps */

} /* join_execution */

}

后面通过索引加入排序字段后减去排序操作,排序字段放在索引的最前面。

create index idx_topxxx1 on topic (create_date desc,is_del,is_en);

9694f79a930e1a36c829116a000b06e3.png

trace 中可以看出排序使用了索引。

"reconsidering_access_paths_for_index_ordering": {

"clause": "ORDER BY",

"index_order_summary": {

"table": "`topic` `t`",

"index_provides_order": true,

"order_direction": "desc",

"index": "idx_topxxx1",

"plan_changed": true,

"access_type": "index"

} /* index_order_summary */

} /* reconsidering_access_paths_for_index_ordering */

},

{

以此记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值