mysql存储引擎层核心服务层_MySQL(逻辑分层,存储引擎,sql优化,索引优化以及底层实现(B+Tree))...

2023-11-14

一 , 逻辑分层

ab63a00b4741158de435c88e8c0a2ee5.png

连接层:连接与线程处理,这一层并不是MySQL独有,一般的基于C/S架构的都有类似组件,比如连接处理、授权认证、安全等。

服务层:包括缓存查询、解析器、优化器,这一部分是MySQL核心功能,包括解析、优化SQL语句,查询缓存目录,内置函数(日期、时间、加密等函数)的实现。

引擎层:负责数据存储,存储引擎的不同,存储方式、数据格式、提取方式等都不相同,这一部分也是很大影响数据存储与提取的性能的;对存储层的抽象。

存储层:存储数据,文件系统。

二 , 存储引擎

查看数据库支持的存储引擎:show engines;

如果要想查看数据库默认使用哪个引擎,可以通过使用命令: show variables like '%storage_engine%';

指定数据库对象的引擎:

create table tb(

id int(4) auto_increment ,

name varchar(5),

dept varchar(5) ,

primary key(id)

)ENGINE=MyISAM AUTO_INCREMENT=1

DEFAULT CHARSET=utf8 ;

查看建表语句:show create table default_table;

MySQL 存储引擎 MyISAM 与 InnoDB 如何选择?

虽然 MySQL 里的存储引擎不只是 MyISAM 与 InnoDB 这两个,但常用的就是它俩了。可能有站长并未注意过 MySQL 的存储引擎,其实存储引擎也是数据库设计里的一大重要点,那么博客系统应该使用哪种存储引擎呢?

下面我们分别来看两种存储引擎的区别。

一、InnoDB支持事务,MyISAM不支持,这一点是非常之重要。事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而MyISAM就不可以了。

二、MyISAM适合查询以及插入为主的应用,InnoDB适合频繁修改以及涉及到安全性较高的应用

三、InnoDB支持外键,MyISAM不支持

四、MyISAM是默认引擎,InnoDB需要指定

五、InnoDB不支持FULLTEXT类型的索引

六、InnoDB中不保存表的行数,如select count(*) from table时,InnoDB需要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含where条件时MyISAM也需要扫描整个表

七、对于自增长的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中可以和其他字段一起建立联合索引

八、清空整个表时,InnoDB是一行一行的删除,效率非常慢。MyISAM则会重建表

九、InnoDB支持行锁(某些情况下还是锁整表,如 update table set a=1 where user like '%lee%'

通过以上九点区别,结合个人博客的特点,推荐个人博客系统使用MyISAM,因为在博客里主要操作是读取和写入,很少有链式操作。所以选择MyISAM引擎使你博客打开也页面的效率要高于InnoDB引擎的博客,当然只是个人的建议,大多数博客还是根据实际情况下谨慎选择。

三, sql优化

3.1.1  mysql 内部实现索引原理(B+Tree)

3.1.1.1 ,  二叉树

adf5393407e533ef34800cb3140a4ca6.png

3.1.1.2 ,  B-Tree

B-Tree中的每个节点根据实际情况可以包含大量的关键字信息和分支,如下图所示为一个3阶的B-Tree:

d0b4cfbb30de23f3df7bb1bd8decba1e.png

每个节点占用一个盘块的磁盘空间,一个节点上有两个升序排序的关键字和三个指向子树根节点的指针,指针存储的是子节点所在磁盘块的地址。两个关键词划分成的三个范围域对应三个指针指向的子树的数据的范围域。以根节点为例,关键字为17和35,P1指针指向的子树的数据范围为小于17,P2指针指向的子树的数据范围为17~35,P3指针指向的子树的数据范围为大于35。

模拟查找关键字29的过程:

根据根节点找到磁盘块1,读入内存。【磁盘I/O操作第1次】

比较关键字29在区间(17,35),找到磁盘块1的指针P2。

根据P2指针找到磁盘块3,读入内存。【磁盘I/O操作第2次】

比较关键字29在区间(26,30),找到磁盘块3的指针P2。

根据P2指针找到磁盘块8,读入内存。【磁盘I/O操作第3次】

在磁盘块8中的关键字列表中找到关键字29。

分析上面过程,发现需要3次磁盘I/O操作,和3次内存查找操作。由于内存中的关键字是一个有序表结构,可以利用二分法查找提高效率。而3次磁盘I/O操作是影响整个B-Tree查找效率的决定因素。

B-Tree相对于AVLTree缩减了节点个数,使每次磁盘I/O取到内存的数据都发挥了作用,从而提高了查询效率。

3.1.1.3 ,  B+Tree(查询任意数据的次数是 n)

B+Tree是在B-Tree基础上的一种优化,使其更适合实现外存储索引结构,InnoDB存储引擎就是用B+Tree实现其索引结构。

从上一节中的B-Tree结构图中可以看到每个节点中不仅包含数据的key值,还有data值。而每一个页的存储空间是有限的,如果data数据较大时将会导致每个节点(即一个页)能存储的key的数量很小,当存储的数据量很大时同样会导致B-Tree的深度较大,增大查询时的磁盘I/O次数,进而影响查询效率。在B+Tree中,所有数据记录节点都是按照键值大小顺序存放在同一层的叶子节点上,而非叶子节点上只存储key值信息,这样可以大大加大每个节点存储的key值数量,降低B+Tree的高度。

B+Tree相对于B-Tree有几点不同:

非叶子节点只存储键值信息。

所有叶子节点之间都有一个链指针。

数据记录都存放在叶子节点中。

将上一节中的B-Tree优化,由于B+Tree的非叶子节点只存储键值信息,假设每个磁盘块能存储4个键值及指针信息,则变成B+Tree后其结构如下图所示:

4e589240911fe5764f46c4df800080d3.png

通常在B+Tree上有两个头指针,一个指向根节点,另一个指向关键字最小的叶子节点,而且所有叶子节点(即数据节点)之间是一种链式环结构。因此可以对B+Tree进行两种查找运算:一种是对于主键的范围查找和分页查找,另一种是从根节点开始,进行随机查找。

上面都应该知道B+Tree 了吧,所以我们在建立索引时,会生成一个B+Tree  如果我们在只查询索引字段时,sql 语句就直接去B+Tree 查,不会再去数据表中查了,这样提升性能是很重要的。 还有就是对于总是修改的字段不要对他建立索引,因为字段修改了,B+Tree 结构就要重构,这要是会降低性能的。

3.1.1 索引分类:

mysql索引的四种类型:主键索引、唯一索引、普通索引和全文索引。通过给字段添加索引可以提高数据的读取速度,提高项目的并发能力和抗压能力。索引优化时mysql中的一种优化方式。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。

主键索引:主键是一种唯一性索引,但它必须指定为PRIMARY KEY,每个表只能有一个主键。

alert table tablename add primary key (`字段名`)

唯一索引:索引列的所有值都只能出现一次,即必须唯一,值可以为空。

alter table table_name add primary key (`字段名`);

普通索引 :基本的索引类型,值可以为空,没有唯一性的限制。

alter table table_name add index (`字段名`);

全文索引:

全文索引的索引类型为FULLTEXT。全文索引可以在varchar、char、text类型的列上创建。可以通过ALTER TABLE或CREATE INDEX命令创建。对于大规模的数据集,通过ALTER TABLE(或者CREATE INDEX)命令创建全文索引要比把记录插入带有全文索引的空表更快。MyISAM支持全文索引,InnoDB在mysql5.6之后支持了全文索引。        全文索引不支持中文需要借sphinx(coreseek)或迅搜技术处理中文。

3.2.2 索引的机制

1.为什么我们添加完索引后查询速度为变快?

传统的查询方法,是按照表的顺序遍历的,不论查询几条数据,mysql需要将表的数据从头到尾遍历一遍

在我们添加完索引之后,mysql一般通过BTREE算法生成一个索引文件,在查询数据库时,找到索引文件进行遍历(折半查找大幅查询效率),找到相应的键从而获取数据

2.索引的代价

2.1创建索引是为产生索引文件的,占用磁盘空间

2.2索引文件是一个二叉树类型的文件,可想而知我们的dml操作同样也会对索引文件进行修改,所以性能会下降

3.在哪些column上使用索引?

3.1较频繁的作为查询条件字段应该创建索引

3.2唯一性太差的字段不适合创建索引,尽管频繁作为查询条件,例如gender性别字段

3.3更新非常频繁的字段不适合作为索引

3.4不会出现在where子句中的字段不该创建索引

总结: 满足以下条件的字段,才应该创建索引.

a: 肯定在where条经常使用 b: 该字段的内容不是唯一的几个值 c: 字段内容不是频繁变化。

3.2.2、SQL解析顺序

接下来再走一步,让我们看看一条SQL语句的前世今生。

首先看一下示例语句

SELECT DISTINCT ..... FROM ..... JOIN ..... ON ..... WHERE..... GROUP BY ..... HAVING ..... ORDER BY ..... LIMIT .....

然而它的执行顺序是这样的

FROM ..... ON ..... JOIN ..... WHERE ..... GROUP BY ..... HAVING ..... SELECT DISTINCT ..... ORDER BY ..... LIMIT .....

3.2.3 如何建立索引

一般说来,索引应建立在那些将用于JOIN,WHERE判断和ORDERBY排序的字段上。尽量不要对数据库中某个含有大量重复的值的字段建立索引。对于一个ENUM类型的字段来说,出现大量重复值是很有可能的情况.

3.2.4     使用索引时,有一些技巧:

1.索引不会包含有NULL的列

只要列中包含有NULL值,都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此符合索引就是无效的。

2.索引要建立在经常进行select操作的字段上。而经常修改的字段,没没必要建立索引了,因为,你建立了索引会生成一个B+树,你修改了该索引的字段后,这个B+树就需要修改,反而对性能不是很好。

3. 复合索引 :复合索引,不要跨列或无序使用(最佳左前缀)

4.like语句操作: 一般情况下不鼓励使用like操作,如果非使用不可,注意正确的使用方式。like ‘%aaa%’不会使用索引,而like ‘aaa%’可以使用索引。

5. 不要在索引上进行任何操作(计算、函数、类型转换),否则索引失效

6.不使用NOT IN 、<>、!=操作,但,>=,BETWEEN,IN是可以用到索引的

7.索引要建立在经常进行select操作的字段上。

这是因为,如果这些列很少用到,那么有无索引并不能明显改变查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。

8.索引要建立在值比较唯一的字段上。

9.对于那些定义为text、image和bit数据类型的列不应该增加索引。因为这些列的数据量要么相当大,要么取值很少。

10.在join操作中(需要从多个数据表提取数据时),mysql只有在主键和外键的数据类型相同时才能使用索引,否则及时建立了索引也不会使用。

三, sql性能问题

a.分析SQL的执行计划  : explain   ,可以模拟SQL优化器执行SQL语句,从而让开发人员 知道自己编写的SQL状况

b.MySQL查询优化其会干扰我们的优化(mysql服务层有一个sql优化器),可以对我们写的sql进行优化,这是我们控制不了的。

查询执行计划:  explain +SQL语句     explain SELECT * from book ;

f247b2ad3a3481e4e37918131aa9b488.png

id : 编号

select_type :查询类型

table :表

type :索引类型 system>const>eq_ref>ref>range>index>all ,要对type进行优化的前提:有索引 一般能达到range 就行。

possible_keys :预测用到的索引

key :实际使用的索引

key_len :实际使用索引的长度

ref :表之间的引用

rows :通过索引查询到的数据量

Extra :额外的信息 下面是他可能发出的情况

i). using filesort : 性能消耗大;需要“额外”的一次排序(查询)  。常见于 order by 语句中。 解决:where哪些字段,就order by那些字段2

ii). using temporary:性能损耗大 ,用到了临时表。一般出现在group by 语句中。 解决: 避免:查询那些列,就根据那些列 group by .

iii). using index :性能提升; 索引覆盖(覆盖索引)。原因:不读取原文件,只从索引文件中获取数据 (不需要回表查询)

只要使用到的列 全部都在索引中,就是索引覆盖using index

iii).using where (需要回表查询)。

假设age是索引列

但查询语句select age,name from ...where age =...,此语句中必须回原表查Name,因此会显示using where.  解决 吧name  也添加到索引中去。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql存储引擎层核心服务层_MySQL(逻辑分层,存储引擎,sql优化,索引优化以及底层实现(B+Tree))... 的相关文章

  • Ceph分布式存储详解

    一 Ceph概述 1 存储发展史 企业中使用存储按照其功能 使用场景 一直在持续发展和迭代 大体上可以分为四个阶段 DAS Direct Attached Storage 即直连存储 第一代存储系统 通过SCSI总线扩展至一个外部的存储 磁
  • ChatGPT泄露用户聊天记录标题;Adobe加入AIGC战局;阿里大模型前带头人杨红霞加盟字节跳动丨每日大事件...

    数据智能产业创新服务媒体 聚焦数智 改变商业 企业动态 诸葛智能推出 诸葛CDP 2 0 等三大产品升级 3月22日 容联云旗下场景化数据智能服务商 诸葛智能 举办2023春季发布会 推出客户数据管理平台 诸葛CDP 2 0 一站式用户行为
  • freemarker动态生成word和pdf

    1 使用freemarker生成word freemarker生成word的方法网上有很多 比较简单 基本上都差不多 所需工具 freemarker
  • Python爬虫之Js逆向案例(3)-X品牌手机社区

    声明 XX手机社区加密逆向分析仅用于研究和学习 这篇文章的学习内容是以XX手机社区为案例 对JS逆向的整个过程进行详细分析 下面会进行以下几步进行分析 下方演示过程全部使用chrome浏览器 锁定关键接口 锁定关键字段 破解关键字段 pyt
  • (Java)leetcode-4 Median of Two Sorted Arrays(寻找两个正序数组的中位数)

    题目描述 给定两个大小为 m 和 n 的正序 从小到大 数组 nums1 和 nums2 请你找出这两个正序数组的中位数 并且要求算法的时间复杂度为 O log m n 你可以假设 nums1 和 nums2 不会同时为空 示例 1 num
  • 三步实现Android任意控件悬浮效果

    Tag 项目介绍 之前做项目的时候实现的一个悬浮效果 如图 可能不够清晰 接下来就是实现效果 如图所示 demo直接用的截图 原理很简单 用RecyclerView addHeaderView的方式实现 实现步骤 1 添加依赖 compil
  • 树莓派——linux内核与驱动

    文章目录 Linux内核基础框架 内核结构框图 linux系统架构 shell 驱动 为什么要学习写驱动 什么是驱动 硬件设备分类 文件名与设备号 驱动结构框图的认知 内核的 sys open sys read 会做什么 驱动程序开发步骤
  • 过采样和欠采样

    一 采样定理 只要采样频率高于信号最高频率的两倍 就可以从采样信号中恢复出原始信号 二 过采样和欠采样 1 采样频率高于信号最高频率的两倍 这种采样被称为过采样 2 采样频率低于信号最高频率的两倍 这种采样被称为欠采样 三 基带信号和频带信
  • 计算机网络知识点汇总

    主要内容 基本概念 物理层 数据链路层 网络层 传输层 应用层 一 基本概念 计算机网络 按照某种协议进行数据通信 实现硬件资源和软件资源的共享 分类 分布范围 使用者 交换技术 拓扑结构 传输技术 计算机网络的体系结构 ISO OSI参考
  • @RequestParam、@PathVariable、@RequestBody、@ResponseBody注解辨析

    RequestParam RequestParam 将请求参数绑定到你控制器的方法参数上 是springmvc中接收普通参数的注解 例如 defaultValue为给name设定默认值 RequestParam中的value值必须跟http
  • UML笔记

    UML笔记 枫叶云笔记
  • GLSL-TBN矩阵

    TBN矩阵 一 简述 1 1 TBN矩阵作用 我们研究一个矩阵的时候通常需要了解一个矩阵是从哪一个空间或者说矩阵而来的 如果搜索一下TBN矩阵运算公式可以发现其决定于物体坐标系下的顶点和纹理坐标系下的纹理坐标 想到这里我们需要明确TBN运算
  • 数据库服务版本升级

    数据库版本升级方法 第一种方法 本地升级 数据库服务5 6 5 7 8 0 停库 第二种方法 迁移升级 数据库服务数据迁移到另一台新的数据库服务中 旧版数据库服务地址 10 0 0 51 网络停止 新版数据库服务地址 10 0 0 51 8
  • AR回归模型详解

    转 http geodesy blog sohu com 273714573 html 1 自回归模型的定义 自回归模型 Autoregressive Model 是用自身做回归变量的过程 即利用前期若干时刻的随机变量的线性组合来描述以后某
  • JavaJDK实现无钥签名根证书与沙箱安全机制

    1 起因 接到项目经理的需求 项目有涉及文件的上传 需要把上传的文件进行数字签名 简称无钥签名 然后对签名后的文件进行无钥验证 对于从来没有听过无钥签名的我感觉很懵 后面就去上网查数字签名是java的哪一块 得到以下结果 Java里其实有两
  • 9.1 Linux配置网络服务

    9 1 1 配置网络参数 9 1 2 创建网络会话 9 1 3 绑定两块网卡 第1步 第2步 第3步 第4步 9 1 1 配置网络参数 在 Linux 系统上配置服务 在此之前 必须先保证主机之间能够顺畅地通信 如果网络不通 即便服务部署得
  • 朱嘉明:区块链成为经济转型、形成产业新业态的技术手段

    文章来自巴比特https www 8btc com live 14 在港珠澳大桥开通 以及粤港澳大湾区规划发展的效应下 珠海和澳门的城市发展进入到一个里程碑式的协同新阶段 尤其是拥有中央战略定位加持的国家级新区 横琴 早已吹响创新发展的号角
  • 第二章:恶意软件动态分析基础

    文章目录 前言 动态分析的局限 前言 静态分析侧重的是恶意软件在文件形式中的表现 动态分析则在一个安全 受控的环境中运行恶意软件以查看其行为方式 通过动态分析 我们可以绕过常见的静态分析障碍 例如加壳 混淆 以更直观地了解给定恶意软件样本的
  • Java 中数据结构LinkedList的用法

    LinkList 链表 Linked list 是一种常见的基础数据结构 是一种线性表 但是并不会按线性的顺序存储数据 而是在每一个节点里存到下一个节点的地址 链表可分为单向链表和双向链表 一个单向链表包含两个值 当前节点的值和一个指向下一

随机推荐

  • IDEA创建父项目和子项目

    一 创建父项目 1 首先在IDEA中使用Spring Initializr的方式创建一个Springboot的工程 点击File gt New gt Project gt Spring Initializr gt Next 2 Projec
  • 首期 OSCHINA 季度软件评选活动正式开启,快来投票吧!

    gt https www oschina net project 2020 q1 project 上周我们发出了 OSCHINA 开源软件趋势榜 即将上线的通知 并收到不少软件推荐 首先要感谢大家的热情参与 若有对此还不了解的朋友 OSCH
  • CSS 滑动门

    先来体会下现实中的滑动门 或者你可以叫做推拉门 滑动门出现的背景 制作网页时 为了美观 常常需要为网页元素设置特殊形状的背景 比如微信导航栏 有凸起和凹下去的感觉 最大的问题是里面的字数不一样多 咋办 为了使各种特殊形状的背景能够自适应元素
  • TypeScript 基础 — Null 和 Undefined

    null 和 undefined 都有各自的类型名称 这些类型本身没有用处 因为我们只能将 null 和 undefined 赋值给定义为 null 或 undefined 类型的变量 let u undefined undefined u
  • Mac os系统下使用python3与Django进行网站搭建-2

    后台管理 站点分为内容发布和公共访问两部分 内容发布的部分是由网站的管理员负责查看 添加 修改 删除数据 开发这些重复的功能是一件繁琐的工作 所以Django能够根据定义的模型类自动地生成管理模块 使用Django的管理模块 需要按照如下步
  • 智能随访系统:提升患者综合服务能力和就医体验,提高医院品牌价值与服务质量

    随着互联网技术的不断发展以及 全民健康 全生命周期管理 概念的深化落实 随访作为医疗过程中的闭环环节 医院传统的人工电话随访方式已不能适应需求 将逐渐被智能化随访系统替代 智能化随访是指结合互联网等主流技术 以专业的随访知识库为基础 提供以
  • uni-app微信小程序开发自定义select下拉多选内容篇

    欢迎点击领取 前端面试题进阶指南 前端登顶之巅 最全面的前端知识点梳理总结 分享一个使用比较久的 技术框架公司的选型 uni app uni ui vue3 vite4 ts 需求分析 微信小程序 uni ui内容 1 创建一个自定义的下拉
  • 基于个人开发的C++MySQL插件使用UE4蓝图连接MySQL数据库

    关于UE4连接数据库 其实很简单 本质上就是使用c 来建立DB操作 再通过封装成蓝图可调用的函数即可 当然一般网络游戏是不需要在蓝图中连接数据库的 因为db操作放在客户端来做是不安全 也是不合理的 试想一下 我如果把你的游戏客户端破解了 是
  • 【推荐算法】FM模型:Factorization Machines

    1 线性回归 在介绍FM之前 我们先简单回顾以下线性回归 回归分析是一种预测性的建模技术 它研究的是因变量 目标 和自变量 预测器 之间的关系 这种技术通常用于预测分析 时间序列模型以及发现变量之间的因果关系 通常使用曲线 直线来拟合数据点
  • Jmeter之json提取器

    目标 步骤 添加 线程组 HTTP 请求 后置处理器 JSON 提取器 配置 引用名称 匹配后的数据要存储的变量名 JSON path json 路径 weatherinfo city 引用 直接引用变量名即可
  • 代码思维怎么训练

    做一个基础页面 表格 表单 导航条 模态框 轮播图 做一个主页 顶部是导航条 导航条的下面是轮播图 右上角是一个注册按钮 点击以后 弹出一个注册的模态框 1 记录思路 2 思路转成注释 越详细越好 3 看着注释写代码 4 如果写不下去 继续
  • 数据库常用SQL语句(二):多表连接查询

    前面主要介绍了单表操作时的相关查询语句 接下来介绍一下多表之间的关系 这里主要是多表数据记录的查询 也就是如何在一个查询语句中显示多张表的数据 这也叫多表数据记录的连接查询 在实现连接查询时 首先是将两个或两个以上的表按照某种关系连接起来
  • nfc(近距离无线通讯技术)

    这个技术由非接触式射频识别 RFID 演变而来 由 飞利浦半导体 现恩智浦半导体 诺基亚和 索尼共同研制开发 其基础是RFID及互连技术 近场通信 Near Field Communication NFC 是一种短距高频的无线电技术 在13
  • 零基础学区块链专栏文章目录

    前往老猿Python博文目录 零基础学区块链专栏 为免费专栏 基于老猿自己零基础学习区块链的知识总结 因此文章一定是循序渐进的介绍区块链相关知识 供类似老猿这种有一定计算机基础但区块链知识为零的同好们参考 但老猿介绍的内容都是概念性的基础知
  • 让你的应用支持新iPad的Retina显示屏

    一 应用图片 标准iOS控件里的图片资源 苹果已经做了相应的升级 我们需要操心的是应用自己的图片资源 就像当初为了支持iPhone 4而制作的 2x高分辨率版本 译者 以下简称高分 图片一样 我们要为iPad应用中的图片制作对应的高分版本
  • java 身边距离怎么查询_附近的人位置距离计算方法

    附近的人的位置用经纬度表示 然后通过两点的经纬度计算距离 根据网上的推荐 最终采用geohash geohash的实现java版 1 importjava util BitSet 2 importjava util HashMap 3 im
  • Pandas删除缺失数据函数--dropna

    在pandas中 dropna函数分别存在于DataFrame Series和Index中 下面我们以DataFrame dropna函数为例进行介绍 Series和Index中的参数意义同DataFrame中大致相同 pandas Dat
  • C# 网络编程之webBrowser乱码问题及解决知识

    在使用PHP MySQL编写网页时 曾近就因为显示中文乱码 口口口 困扰我很长时间 没想到在C 制作浏览器或获取XML页面时也经常会遇到显示中文乱码的问题 可想而知怎样解决编码问题或统一编码问题是非常严重的问题 下面就讲讲我的一些理解及解决
  • 《曾国藩家书》读书手记(修身篇一)

    曾国藩被章太炎评价为 誉之则圣相 谳之则元凶 为什么有这样的评价呢 我们可以看出曾国藩这个人褒贬不一 不过毛和蒋对于曾国藩都是推崇备至 毛说过 吾近于人 独服于曾国藩 看来曾国藩还是有可取之处的 尤其是他的家书 很多人评价甚高 一 修身篇
  • mysql存储引擎层核心服务层_MySQL(逻辑分层,存储引擎,sql优化,索引优化以及底层实现(B+Tree))...

    一 逻辑分层 连接层 连接与线程处理 这一层并不是MySQL独有 一般的基于C S架构的都有类似组件 比如连接处理 授权认证 安全等 服务层 包括缓存查询 解析器 优化器 这一部分是MySQL核心功能 包括解析 优化SQL语句 查询缓存目录