• 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)都被查出来了, 再把临时表从后向前返回.

  • 相关阅读:
    python 开启多进程的两种方法
    Python
    Python
    路由器配置
    python 自定义报头 实现大文件传输
    python socket
    Spring MVC 实现文件的上传
    SpringMVC异常处理
    SpringMVC 返回值类型,参数传递 解决乱码
    Spring—MVC案例
  • 原文地址:https://www.cnblogs.com/bianzy/p/6529406.html
Copyright © 2020-2023  润新知