MySQL 相关
Innodb引擎
Innodb引擎提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别。该引擎还提供了行级锁和外键约束,它的设计目标是处理大容量数据库系统。
但是该引擎不支持FULLTEXT类型的索引,而且它没有保存表的行数,当SELECT COUNT(*) FROM TABLE时需要扫描全表。
辅助索引存储的也是索引的值,而不是地址,再根据主键索引查找相应的值。
B+树,聚集索引
MyIASM引擎
MyIASM是MySQL默认的引擎,但是它没有提供对数据库事务的支持,也不支持行级锁和外键,因此当INSERT(插入)或UPDATE(更新)数据时即写操作需要锁定整个表,效率便会低一些。
B+树,非聚集索引
基础概念
B树
B树,其实就是平衡树。不平衡的二叉查找树是灾难。如果有更多的分支,那么就有更少的高度。31个节点的理想二叉树有5层,而31个节点的5叉树只有3层。原则上B树保证只有少数的磁盘访问。
用阶定义的B树
一棵m阶的B树 -- 5阶的B树
1 树中每个节点最多有5个孩子
2 除根结点和叶子结点外,其他每个结点至少有3个孩子。
3 若根结点不是叶子结点,则至少有2个孩子。

模拟下查找文件29的过程。
1 根据根节点指针找到根磁盘块1,将信息倒入内存【磁盘IO操作1次】。
2 内存中有17、35和3个其他磁盘分页的地址。17<29<35,找到指针P2。
3 找到磁盘块3,将信息倒入内存【磁盘IO操作2次】。
4 26<29<30,我们找到指针P2。
5 找到磁盘块8【磁盘IO操作3次】。
6 这个时候,我们找到了29。
B+树
B+树内部结点没有指向具体信息的指针,因此内部结构比B树更小。
查询效率更加的稳定。
B+树只需要遍历叶子结点就可以实现整棵树的遍历,有利于数据库的范围查询。
下面的图不是100%完全正确,但是当个示意图应该没有问题。

InnoDB的逻辑存储结构

表空间
启动了innodb_file_per_table参数,则每张表独立一个文件。
段
表空间由段组成
区
一般区大小正好为1M
页
InnoDB磁盘管理的最小单位,固定大小为16K
行
InnoDB表中数据按行存储。
数据库自增主键的问题:
1 主外键关系表的并发性能问题。
2 分布式系统的唯一性问题。
3 数字类型的溢出问题。
4 扩展性问题,不可拆库。
5 每次请求全局id,读写库压力过大。
Redis相关
Redis也有事务的功能,但是这个事务可能跟MySQL之类的RDBMS不同。官网上的Transactions介绍了Redis中的事务。Redis中使用multi和exec命令设定事务边界,discard在multi命令提交后可丢弃事务。另外watch命令可以实现CAS操作。
Redis为什么不支持回滚,因为Redis命令失败最大可能是因为命令输错了。
因为Redis是单线程程序,所以只要存储事务操作最后一起执行就实现了原子性操作,如果增加回滚会影响Redis性能。
使用方式
> MULTI
OK
> INCR foo
QUEUED
> INCR bar
QUEUED
> EXEC
1) (integer) 1
2) (integer) 1
使用CAS
单机的话,下面的做法没有问题。
val = GET mykey
val = val + 1
SET mykey $val
但是在多客户端的情况下,这个会导致经典的条件竞争。
watch stringA
stringA_r = stringA + “abcd”
multi
set stringA string_r
exec
监视变量,当执行操作之前,检查变量是否已经改变。Redis本身就是单线程的,事务实现相当的简单。但是客户端的交互却不是单线程的。当监视的变量变化之后,redis会放弃当前的操作,客户端这个时候需要做一些异常处理。
MySQL 相关的更多相关文章
- 关于MySQL相关的查看显示信息:
关于MySQL相关的查看显示信息: 数据库范围: 一.查看所有的数据库:(仅仅是看数据库数量与名字) mysql> show databases; 二.查看某个数据库的创建信息:(主要看数据库的 ...
- .NetCore关于Cap(RabbitMQ)结合MySql使用出现MySql相关类冲突问题解决办法
问题还原 引用了 DotNetCore.CAP.MySql MySql.Data.EntityFrameworkCore 在使用MySql相关对象的时候会出现如下冲突,在命名空间加入伪空间名称是不能解 ...
- MySQL相关问题总结
希望此贴能够将MySQL安装周围的问题总结清楚,也免得自己再遇到问题时而不知所措.本帖中所有关于MySQL的问题均涉及到两个平台:Ubuntu 和 Windows(本人没有Mac) 问题1:MySQL ...
- 09js、MySQL相关
09js.MySQL相关-2018/07/19 1.js的dom 理解一下文档对象模型:html文件加载到内存之后会形成一颗dom树,根据这些节点对象可以进行脚本代码的动态修改;在dom树当中 一切皆 ...
- Linux下mysql相关操作
Linux下mysql相关操作 1.创建MySQL mysql -u root -p create user 'username'@'%' identified by 'password'; %可以选 ...
- MySQL相关参数总结
保留个原文链接,避免被爬虫爬了过去,以便后续更正补充:https://www.cnblogs.com/wy123/p/11273023.html MySQL参数繁多,是一个需要根据具体业务.软硬件环境 ...
- sql注入原理+mysql相关知识点
什么是SQL注入 sql就是经常说的数据库,而sql注入就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.SQL注入是比较常见的网络攻击 ...
- visual studio 2015连接到MySql相关问题
vs中使用服务器资源管理器连接到MySQL没有成功.按照网上提供的解决方法,相关插件已经安装: 1.控制面板中,MySQL Connector Net 6.9.9已经安装(原安装版本为6.9.8,后升 ...
- MySQL相关
1.进入安装目录 cd E:\ZYXDocument\Software\mariadb-10.0.20-win32\bin 2.安装mysql服务将E:\ZYXDocument\Software\ma ...
随机推荐
- 走进AngularJs(二) ng模板中常用指令的使用方式
通过使用模板,我们可以把model和controller中的数据组装起来呈现给浏览器,还可以通过数据绑定,实时更新视图,让我们的页面变成动态的.ng的模板真是让我爱不释手.学习ng道路还很漫长,从模板 ...
- php 如何解决“您访问的域名有误或网页不存在”
对一个域名访问,在家访问正常,到办公室就总是看到下面的页面. 清楚浏览器浏览数据是一个解决途径.这里通过Chrome浏览做示例.通过标记路径,进入清除界面. 也可以在浏览器地址中输入 chrome:/ ...
- svn清理失败且路径显示乱码
1.下载 sqlite数据库工具,sqlite3.exe下载地址:sqlite官网http://www.sqlite.org/download.html,我这里是windows操作系统,因此下载 Pr ...
- SingleTon单例模式总结篇
在Java设计模式中,单例模式相对来说算是比较简单的一种构建模式.适用的场景在于:对于定义的一个类,在整个应用程序执行期间只有唯一的一个实例对象. 一,懒汉式: 其特点是延迟加载,即当需要用到此单一实 ...
- miniui无法传递input值
miniui获取到的值死活传不到php去处理,input框里有值php接收到却一直为空,又是查资料.测试.搜索.提问,最后才在文档中发现尼玛miniui不用name的,其实是<input tex ...
- Alpha阶段项目展示
1.团队简介 韩青长 前端工程师 我是韩青长,技术小白,抱着对软工的好奇和对未来工作的憧憬选了这门课.暂时选择了测试的工作,也对开发和UI有一定兴趣.从前上帝创造了我们,现在轮到我们来创造自己的软件了 ...
- 海思H264解码库 hi_h264dec_w.dll 水印问题
上一篇 海思h264解码库 , 实现了H264帧的简单解码,但更换相机后,出现了解码视频中央出现水印的问题,水印如下图 查找网络,基本就这一篇相关的,还没给出好的解决办法. http://bbs. ...
- Asp.net MVC Comet推送
一.简介 在Asp.net MVC实现的Comet推送的原理很简单. 服务器端:接收到服务器发送的AJAX请求,服务器端并不返回,而是将其Hold住,待到有东西要通知客户端时,才将这个请求返回. 客户 ...
- UI第九节——UIStepper
- (void)viewDidLoad { [super viewDidLoad]; // 实例化UIStepper,大小是固定的 UIStepper *stepper = ...
- 【荐】怎么用PHP发送HTTP请求(POST请求、GET请求)?
file_get_contents版本: <?php /** * 发送post请求 * @param string $url 请求地址 * @param array $post_data pos ...