mysql use temporary_MySQL优化:explain using temporary

什么时候会使用临时表:group/order没设计好的时候

1.order没用索引

2.order用了索引, 但不是和where相同的索引

3.order用了两个索引, 但不是联合索引

4.order用了联合索引, 但排序顺序不同序

原因:

1.不用说

2.mysql一次只能用一个索引

3.4 其实原因一样, 和索引的结构有关:

索引是一个B+树, 比如一个联合索引如下(x, y):

(2, 5) - (6, 10)  (7, 3) - (10, 19) ...

如果是联合索引, 排序同序, 取结果的时候直接从B+树从后向前或者从前向后取就可以了,

但如果是两个索引, 显然不能直接从一个B+树取值.

如果顺序不相同, 例如ASC, DESC, 有两个索引(2, 5), (2,7), 当Mysql取到第一个(2,5)时, 并不知道后面还有没有(2, x), 所以不能先把(2, 5)返回, 这时候就要用到temporary来先存着(2, 5)这行, 等(2, x)都被查出来了, 再把临时表从后向前返回.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值