学习博客:
廖雪峰(http://www.liaoxuefeng.com)
一文彻底搞懂MySQL基础:B树和B+树的区别_公众号:码农富哥的博客-CSDN博客_b树和b+树有什么区别
目录
5.将a11改为se1ect权限,并且将*.*改为指定数据库编辑
*数据库:
关系型数据库:
(1)Mysql
mysql 中的变量分为系统变量和状态变量(status);
系统变量又分为全局(global variables)和会话变量(session variables),全局作用在整体,而会话只作用于当前;
(2)oracle
(3)sqlserver
非关系型数据库:
(1)redis
(2)mongoDB
思考:
1.MySQL架构:
B+树(多路平衡搜索树),与其他树不同之处在于:
(1)所有关键字存储在叶子节点出现,内部节点(非叶子节点并不存储真正的 data)
(2)为所有叶子结点增加了一个链指针
如图:
MySQL使用B+是因为对比其他树来说,B+树在磁盘I/O消耗上较小,利用磁盘预读原理提前将这些数据读入内存,减少了磁盘 IO 的次数。当然B+树也能够很好的完成范围查询。比如查询 key 值在 50-70 之间的节点。由于磁盘读写的数据大小是固定的,在一次 IO 中,单个元素越小,量就越大。这就意味着B+树单次磁盘 IO 的信息量大于B-树,B+树只有叶子节点存data,非叶子节点都只是索引值,没有实际的数据,这就时B+树在一次IO里面,能读出的索引值更多。从而减少查询时候需要的IO次数!
如图:
2.page页默认16kb能否进行更改?
MySQL在使用innodb引擎的时候页大小默认是16KB,在MySQL中是不能修改的,但是可以通过修改当前版本数据库的源码来进行调整;
首先查看innodb引擎的默认页大小:
修改源码步骤:
(1)下载Mysql源码
这里为了方便为大家演示修改过程我就下载了Windows版本的
下面是相关文件夹的作用:
client:客户端相关的软件和工具代码
cmake:CMAKE相关的脚本命令文件
components:组件工具
Docs:文档文件夹
doxyen_resources:doxyen工具相关资源
extra:引入的一些其它包,如网络消息谁的SSL包以及一些小工具。
include:源码用的相关的头文件放置的文件夹,但不包括存储引擎的头文件。
libbinlogevents:解析Binlog的lib服务,5.7后提供。
libbinlogstandalone:脱机配置CMAKE
libmysql:可嵌入式的客户端API
libservices:动态服务插件管理
man:帮助文档
mysql-test:服务端mysqlid的测试工具。
mysys:MySql自己实现的数据结构和一些基本算法。如数组和链表等。
packaging:打包相关
plugin:插件管理文件夹,包括一些动态加入的插件。
router:集群路由
scripts:系统工具运行的脚本。
share:共享信息,err和字符集
source_downloads:
sql:服务端的主要代码,包括main函数。
sql-common:服务端和客户端通用的一些代码
strings:字符串库
support-files:.conf的示例文件和相关工具。
testclients:客户框架测试。
unittest:单元测试,这个搞程序的都知道。
utilities:公用的一些文件,有ZLIB等
vio:虚拟网络IO处理系统,不同平台或不同协议的网络通信API的二次封装。
(2)解压打开storage/innobase/include/univ.i 修改univ.i下参数(storage:存储引擎相关文件)
(3)编译完成运行查看默认页page大小
*UNIV_PAGE_SIZE大小只能是2的次方,如8K,16K,32k,UNIV_PAGE_SIZE_SHIFT 该值是2的多少次方为UNIV_PAGE_SIZE
版本8.0后可以通过终端修改配置文件:
3.truncate和delete区别:
*truncate和drop都是DDL语句,但是drop执行后既删除data还删除table structure表结构
*回滚-数据库数据提交前将数据库数据恢复到数据修改之前数据库数据的状态
4.substr和substring的区别:
(1)mysql中: