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

Linux的资源监视工具

发布时间:2021-02-17 11:30:23 所属栏目:外闻 来源:互联网
导读:发现这里是用到了优先级队列进行排序。排序模式是:sort_key, additional_fields,即先回表查询完整记录,把排序需要查找的所有字段都放入sort buffer进行排序。 所以这个执行流程如下图所示: 通过where条件a=3扫描到8520条记录; 回表查找记录; 把8520条记

发现这里是用到了优先级队列进行排序。排序模式是:sort_key, additional_fields,即先回表查询完整记录,把排序需要查找的所有字段都放入sort buffer进行排序。

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

  1. 通过where条件a=3扫描到8520条记录;
  2. 回表查找记录;
  3. 把8520条记录中需要的字段放入sort buffer中;
  4. 在sort buffer中进行堆排序;


  • 果参与排序的数据sort buffer装不下了,那么我们会一批一批的给sort buffer进行内存快速排序,结果放入排序临时文件,最终使对所有排好序的临时文件进行归并排序,得到最终的结果;
  • 如下,a=3的记录超过了sort buffer,我们要查找的数据是排序后1000行起,sort buffer装不下1000行数据了,最终MySQL选择使用sort buffer进行分批快排,把最终结果进行归并排序:

1.1、排序模式

其中 sort_mode有如下几种形式:

  • sort_key, rowid:表明排序缓冲区元组包含排序键值和原始表行的行id,排序后需要使用行id进行回表,这种算法也称为original filesort algorithm(回表排序算法);
  • sort_key, additional_fields:表明排序缓冲区元组包含排序键值和查询所需要的列,排序后直接从缓冲区元组取数据,无需回表,这种算法也称为modified filesort algorithm(不回表排序);
  • sort_key, packed_additional_fields:类似上一种形式,但是附加的列(如varchar类型)紧密地打包在一起,而不是使用固定长度的编码。

如何选择排序模式

选择哪种排序模式,与max_length_for_sort_data这个属性有关,这个属性默认值大小为1024字节:

  • 如果查询列和排序列占用的大小超过这个值,那么会转而使用sort_key, rowid模式;
  • 如果不超过,那么所有列都会放入sort buffer中,使用sort_key, additional_fields或者sort_key, packed_additional_fields模式;
  • 如果查询的记录太多,那么会使用sort_key, packed_additional_fields对可变列进行压缩。

1.2、排序算法

基于参与排序的数据量的不同,可以选择不同的排序算法:

  • 如果排序取的结果很小,小于内存,那么会使用优先级队列进行堆排序;
  • 例如,以下只取了前面10条记录,会通过优先级队列进行排序:


8.8 volatile底层的实现机制

可以看本文的第六小节,volatile底层原理哈,主要你要跟面试官讲述,volatile如何保证可见性和禁止指令重排,需要讲到内存屏障~

8.9 volatile和synchronized的区别?

  • volatile修饰的是变量,synchronized一般修饰代码块或者方法
  • volatile保证可见性、禁止指令重排,但是不保证原子性;synchronized可以保证原子性
  • volatile不会造成线程阻塞,synchronized可能会造成线程的阻塞,所以后面才有锁优化那么多故事~
  • 哈哈,你还有补充嘛~

 

(编辑:吉安站长网)

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

    热点阅读