加入收藏 | 设为首页 | 会员中心 | 我要投稿 吉安站长网 (https://www.0796zz.com.cn/)- 科技、图像处理、媒体智能、办公协同、操作系统!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

人工智能和机器学习还有什么好处?

发布时间:2021-02-17 11:29:35 所属栏目:外闻 来源:互联网
导读:可以发现这个时候切换到了sort_key, rowid模式,在这个模式下,执行流程如下: where条件a=3扫描到8520条记录; 回表查找记录; 找到这8520条记录的id和d字段,放入sort buffer中进行堆排序; 排序完成后,取前面10条; 取这10条的id回表查询需要的a,b,c,d字

可以发现这个时候切换到了sort_key, rowid模式,在这个模式下,执行流程如下:

  1. where条件a=3扫描到8520条记录;
  2. 回表查找记录;
  3. 找到这8520条记录的id和d字段,放入sort buffer中进行堆排序;
  4. 排序完成后,取前面10条;
  5. 取这10条的id回表查询需要的a,b,c,d字段值;
  6. 依次返回结果给到客户端。

4、排序模式案例

4.1、sort_key, additional_fields模式

sort_key, additional_fields,排序缓冲区元组包含排序键值和查询所需要的列(先回表取需要的数据,存入排序缓冲区中),排序后直接从缓冲区元组取数据,无需再次回表。

上面 2.3.1、2.3.2节的例子都是这种排序模式,就不继续举例了。

4.2、模式

sort_key, packed_additional_fields:类似上一种形式,但是附加的列(如varchar类型)紧密地打包在一起,而不是使用固定长度的编码。

上面2.3.3节的例子就是这种排序模式,由于参与排序的总记录大小太大了,因此需要对附加列进行紧密地打包操作,以节省内存。

4.3、模式

前面我们提到,选择哪种排序模式,与max_length_for_sort_data[2]这个属性有关,max_length_for_sort_data规定了排序行的最大大小,这个属性默认值大小为1024字节:

 

可以发现这里最终放弃了优先级队列,转而使用sort buffer进行快速排序。

所以这个执行流程如下图所示:

  1. 通过where条件a=1扫描到3条记录;
  2. 回表查找记录;
  3. 把3条记录中需要的字段放入sort buffer中;
  4. 在sort buffer中进行快速排序;
  5. 在排序好的结果中取limit 300, 2第300、301条记录,写入net buffer,准备发送给客户端。

.2、内部快速排序

如果排序limit n, m,n太大了,也就是说需要取排序很后面的数据,那么会使用sort buffer进行快速排序。MySQL会对比优先级队列排序和归并排序的开销,选择一个比较合适的排序算法。

如何衡量究竟是使用优先级队列还是内存快速排序?

一般来说,快速排序算法效率高于堆排序,但是堆排序实现的优先级队列,无需排序完所有的元素,就可以得到order by limit的结果。

MySQL源码中声明了快速排序速度是堆排序的3倍,在实际排序的时候,会根据待排序数量大小进行切换算法。如果数据量太大的时候,会转而使用快速排序。

有如下SQL:



(编辑:吉安站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读