zoukankan      html  css  js  c++  java
  • Mysql索引优化、JMM内存模型

    Mysql索引优化

    二叉树

    红黑树

    Hash表

    B-Tree(B树)

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

    索引的底层数据结构

    B+TreeB+树)

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

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

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

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

       

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

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

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

       

    联合索引

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

       

    JMM内存模型

    Java线程内存模型

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

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

       

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

       

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

       

       

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

    MESI缓存一致性

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

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

       

    Volatile可见性底层原理

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

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

  • 相关阅读:
    java 多线程小记
    Java通过反射实现实例化
    selenium webdriver 屏幕滚动
    selenium webdriver 实现百度贴吧自动签到
    selenium webdriver 小计
    JaveWeb 公司项目(7)----- 通过JS动态生成DIV
    两个DIV并排显示
    Intellij idea注册码失效
    JaveWeb 公司项目(6)----- 通过ToolTip给控件添加动态注释
    Intellij idea 添加浏览器
  • 原文地址:https://www.cnblogs.com/ChengR/p/14785840.html
Copyright © 2011-2022 走看看