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 相关的更多相关文章

  1. 关于MySQL相关的查看显示信息:

    关于MySQL相关的查看显示信息: 数据库范围: 一.查看所有的数据库:(仅仅是看数据库数量与名字) mysql> show databases; 二.查看某个数据库的创建信息:(主要看数据库的 ...

  2. .NetCore关于Cap(RabbitMQ)结合MySql使用出现MySql相关类冲突问题解决办法

    问题还原 引用了 DotNetCore.CAP.MySql MySql.Data.EntityFrameworkCore 在使用MySql相关对象的时候会出现如下冲突,在命名空间加入伪空间名称是不能解 ...

  3. MySQL相关问题总结

    希望此贴能够将MySQL安装周围的问题总结清楚,也免得自己再遇到问题时而不知所措.本帖中所有关于MySQL的问题均涉及到两个平台:Ubuntu 和 Windows(本人没有Mac) 问题1:MySQL ...

  4. 09js、MySQL相关

    09js.MySQL相关-2018/07/19 1.js的dom 理解一下文档对象模型:html文件加载到内存之后会形成一颗dom树,根据这些节点对象可以进行脚本代码的动态修改;在dom树当中 一切皆 ...

  5. Linux下mysql相关操作

    Linux下mysql相关操作 1.创建MySQL mysql -u root -p create user 'username'@'%' identified by 'password'; %可以选 ...

  6. MySQL相关参数总结

    保留个原文链接,避免被爬虫爬了过去,以便后续更正补充:https://www.cnblogs.com/wy123/p/11273023.html MySQL参数繁多,是一个需要根据具体业务.软硬件环境 ...

  7. sql注入原理+mysql相关知识点

    什么是SQL注入 sql就是经常说的数据库,而sql注入就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.SQL注入是比较常见的网络攻击 ...

  8. visual studio 2015连接到MySql相关问题

    vs中使用服务器资源管理器连接到MySQL没有成功.按照网上提供的解决方法,相关插件已经安装: 1.控制面板中,MySQL Connector Net 6.9.9已经安装(原安装版本为6.9.8,后升 ...

  9. MySQL相关

    1.进入安装目录 cd E:\ZYXDocument\Software\mariadb-10.0.20-win32\bin 2.安装mysql服务将E:\ZYXDocument\Software\ma ...

随机推荐

  1. JAVA锁的膨胀过程和优化

    首先说一下锁的优化策略. 1,自旋锁 自选锁其实就是在拿锁时发现已经有线程拿了锁,自己如果去拿会阻塞自己,这个时候会选择进行一次忙循环尝试.也就是不停循环看是否能等到上个线程自己释放锁.这个问题是基于 ...

  2. Win10 PC一周年更新正式版14393.447 32位/64位更新补丁KB3200970下载 Flash补丁Kb3202790下载

    微软在今天凌晨推送了Win10 PC一周年更新正式版14393.447,本次更新补丁代号为KB3200970,面向Win10一周年更新正式版的PC用户. 更新日志 • 提升了多媒体音频.远程桌面以及I ...

  3. 【Beta】Scrum03

    Info 时间:2016.12.01 21:30 时长:15min 地点:大运村1号公寓5楼楼道 类型:日常Scrum会议 NXT:2016.12.04 21:30 Task Report Name ...

  4. bzoj 1004 Cards

    1004: [HNOI2008]Cards Description 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿色.他询问Sun有 多少种染色方案,Sun ...

  5. diff 比较两个文件的差异

    功能:比较两个文件的差异,并把不同地方的信息显示出来.默认diff格式的信息. diff比较两个文件或文件集合的差异,并记录下来,生成一个diff文件,这也是我们常说的补丁文件.也使用patch命令对 ...

  6. 4Struts2标签库----青软S2SH(笔记)

    这里弄错了,这一堆属性是<datetimepicker>标签的,不是<doubleselect>标签的 输出错误信息这个不错,挺方便的. 这个树形标签,也用了好多网络,分析如下 ...

  7. VBA笔记(二)——基础语法

    数据类型 VBA提供了15种标准数据类型,具体见下表: 变量 Sub 变量学习() 'Dim 变量名 As 数据类型 Dim str1 As String '声明定长的String变量 '使用变量类型 ...

  8. ANT的安装

    1.下载ANT http://ant.apache.org/bindownload.cgi 2.将下载下来的压缩包解压到任意文件夹下,例如D盘根目录下D:/apache-ant-1.9.2 3.添加环 ...

  9. CSS-dl+dt+dd的应用(非常实用)

    http://smallpig301.blog.163.com/blog/static/9986093201010262499229/

  10. Linux tar (打包.压缩.解压缩)命令说明 | tar如何解压文件到指定的目录?

    打包举例:将 /usr/local/src/zlib-1.2.5目录下的文件打包成 zlib-1.2.5.tar.gz cd /usr/local/src tar -czvf ./zlib-1.2.5 ...