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

使用了索引,查询还是慢?

发布时间:2021-02-17 11:31:11 所属栏目:外闻 来源:互联网
导读:这篇文章我们从比较宏观的角度来看MySQL中关键字的原理。本文,我们主要探索order by语句的底层原理。阅读完本文,您将了解到: order by语句有哪些排序模式,以及每种排序模式的优缺点; order by语句会用到哪些排序算法,在什么场景下会选择哪种排序算法;

这篇文章我们从比较宏观的角度来看MySQL中关键字的原理。本文,我们主要探索order by语句的底层原理。阅读完本文,您将了解到:

order by语句有哪些排序模式,以及每种排序模式的优缺点;

order by语句会用到哪些排序算法,在什么场景下会选择哪种排序算法;

如何查看和分析sql的order by优化手段(执行计划 + OPTIMIZER_TRACE日志);

如何优化order by语句的执行效率?(思想:减小行大小,尽量走索引,能够走覆盖索引最佳,可适当增加sort buffer内存大小)

这里我们从数据结构的维度来看数据和索引,也就是都当成B+树的的,我们需要数据的时候再从存储引擎的B+树中读取。

以下是我们本文作为演示例子的表,假设我们有如下表:

 

8.2 volatile的内存语义

当写一个 volatile 变量时,JMM 会把该线程对应的本地内存中的共享变量值刷新到主内存。

当读一个 volatile 变量时,JMM 会把该线程对应的本地内存置为无效。线程接下来将从主内存中读取共享变量。

8.3 说说并发编程的3大特性

  • 原子性
  • 可见性
  • 有序性

8.4 什么是内存可见性,什么是指令重排序?

可见性就是指当一个线程修改了共享变量的值时,其他线程能够立即得知这个修改。

指令重排是指JVM在编译Java代码的时候,或者CPU在执行JVM字节码的时候,对现有的指令顺序进行重新排序。

8.5 volatile是如何解决java并发中可见性的问题

底层是通过内存屏障实现的哦,volatile能保证修饰的变量后,可以立即同步回主内存,每次使用前立即先从主内存刷新最新的值。

8.6 volatile如何防止指令重排

也是内存屏障哦,跟面试官讲下Java内存的保守策略:

  • 在每个volatile写操作的前面插入一个StoreStore屏障。
  • 在每个volatile写操作的后面插入一个StoreLoad屏障。
  • 在每个volatile读操作的前面插入一个LoadLoad屏障。
  • 在每个volatile读操作的后面插入一个LoadStore屏障。

再讲下volatile的语义哦,重排序时不能把内存屏障后面的指令重排序到内存屏障之前的位置

8.7 volatile可以解决原子性嘛?为什么?不可以,可以直接举i++那个例子,原子性需要synchronzied或者lock保证


(编辑:吉安站长网)

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

    热点阅读