首页 > 数据库技术 > 详细

Mysql索引优化、JMM内存模型

时间:2020-06-05 10:37:35      阅读:69      评论:0      收藏:0      [点我收藏+]

Mysql索引优化

二叉树

红黑树

Hash表

B-Tree(B树)

技术分享图片

先从根节点(每个节点16k)查找,根节点(常驻内存)

索引的底层数据结构

B+TreeB+树)

技术分享图片

先从根节点(每个节点16k)查找,根节点(常驻内存)

可以存储1170*1170*16个索引

数据库存储引擎(是形容存储的表的结构)(不同表的底层存储的数据结构可能不同)

技术分享图片

索引最后找到的是索引所在行的磁盘地址指针(数据和索引所指的数据的存储是分开的,非聚集索引)

? ?

技术分享图片

聚集索引就是叶子节点和数据的值是放在一起的(数据和索引所指的数据是存储到一起的)

B+树必须使用主键来维护B+树的数据结构,整形的数据比较比较快,存储空间更小

可以使用指针直接查询到相邻的查询节点,不用再次从根节点查询(同层级从左至右依次递增)

? ?

联合索引

技术分享图片

一个索引中存储多个数据,从上至下按照字段一次查询

? ?

JMM内存模型

Java线程内存模型

技术分享图片

每次线程工作时,会从主内存的共享变量中拷贝一份到一个线程的工作内存中,

该线程操作完的数据不会与其他线程共享,也不会再次写入到主内存

? ?

可以使用 volatile 关键字使数据被多个线程共享操作(保证变量对多个线程的可见性)

? ?

JMM数据原子操作(使用原子操作进行线程之间的数据操作)

技术分享图片

? ?

技术分享图片

? ?

总线加锁(多线程数据可见性早期的解决方案

技术分享图片

MESI缓存一致性

技术分享图片

如果开启了缓存一致性协议,当一个线程把数据修改了,会立即同步回主内存的数据,

其他开启缓存一致性协议的线程会监听着总线,发现数值失效后也会立即从主内存到各自线程内部的数据

? ?

Volatile可见性底层原理

技术分享图片

Volatile底层是C语言实现的,可以看汇编语言

汇编的lock加锁操作,是在同步会主内存时,只能该同步的线程操作,只有当主内存同步完成后锁才会释放

Mysql索引优化、JMM内存模型

原文:https://www.cnblogs.com/ChengR/p/13047573.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!