cyc大佬有地方写的不全,补充(数据库篇)

打印 上一主题 下一主题

主题 1057|帖子 1057|积分 3171

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
.索引

1.B树,B+树,以及两者的区别
B树是一种多路均衡查找树,其每一个节点都存储Key和data
B+树是B树的一个变种,叶子节点存储data,非叶子节点只存储key,B+树的叶子节点增加了次序访问指针,每一个叶子节点都可以访问到他的下一个叶子节点


区别:
1.B+树种只有叶子节点会带有全部信息,非叶子节点只起到索引的作用,二B树的所有节点都带有全部信息,B+树的每一层节点都会再次出如今下一层节点上
2.B+树种所有叶子节点都是通过指针连在一起,B树则没有

2.索引的长处和缺点
长处:可以加大检索速率
缺点:创建和维护索引须要泯灭时间

3.Mysql为什么选择B+树
Mysql数据本质上是放在外部存储的,B+树是为了加快读取速率二设计的一种数据布局
1.可以减少i/o次数,只有叶子节点才存储数据,非叶子节点存储索引,如许一次读取到内存的关键字增多,相对i/o次数也就减少(根据区别一)
2.可以或许提供稳固高效的范围扫描,因为所有的叶子节点都互相毗连(根据区别二)

4.索引越多越好吗?
索引可以提高select的效率,但是也低沉了insert和updata的效率,因为插入和更新的时间可能会重建索引,索引怎么建索引要慎重思量。

5.索引分类
1.B+树索引:以b+树作为数据布局的索引
2.hash索引:能以O(1)的时间复杂度查找,但失去了有序性,innodb有一个自适应哈希索引,当这个索引值被频繁使用时会在b+树上创建一个哈希索引
3.全文索引:用于查找文本的关键词,中文须要由中文分词插件
. MySQL优化

一.MySQL的优化,主要分为索引的的优化,sql语句的优化,表的优化。同时可以使用缓存增加效率
1.索引的优化
只要列中含有null,最好不要再此列设置索引
对于经常在where语句中使用的列,最好设置一个索引
对于like语句,以%或者-开头的不会使用索引,以%末端会使用索引

二.sql语句的优化
查询优化要尽量避免全表扫描
查询时能不消*就不消*,尽量写字段名


. MySQL常问题目

1.数据库怎样应对大规模的写入和读取
(1)使用NoSQL,通过低沉数据的安全性,减少对事物的支持,减少复杂查询的支持来获取性能的提升;但有些场合NoSQL无法满足要求
(2)分库分表:
水平切分:不修改数据库的表布局,通过对表中的数据拆分而到达分片的目的,一样平常水平切分在查询的时间可能会用到union操作(多个结果并)
可以根据hash或者日期来进行分表

垂直切分:修改表布局,按照访问的差别将某些列拆分出去,一样平常查询数据的时间可能会用到join操作;把常用的字段放在一个表中,不常用的放在一个表中;把字段比力大的比如text字段拆出来放在一个表中。

分库:分表可以或许解决数据量过大带来的查询效率降落题目,但是却无法给数据库的并发处置惩罚本事带来质的提升;分库可以对关键字取模的方式来对数据访问进行路由;

(3)读写分离:
读写分离是在主服务器上修改数据,数据也会同步到从服务器上,从服务器只能提供读取,不能写入,实现备份的同时也实现了数据库的性能优化


怎样包管数据同等性:

(1)主节点

包管变乱每次提交之后,要确保binlog都能刷新到磁盘中,只要有了binlog,innoDB就有方法恢复数据,不至于导致主从复制的数据丢失

(2)从节点

    开启 relay log 自动修复机制,发生 crash 时,会自动判断哪些 relay log 须要重新从master 上抓取回来再次应用,以此避免部分数据丢失的可能性。


2.数据库变乱及其隔离级别

变乱的特性:ACID


变乱在并发的时间,隔离性很难包管主要可能出现下面这些题目:

脏读:一个变乱读了别的一个变乱未提交的数据,如果另一个变乱回滚则会发生脏读

不可重复读:一个变乱前后读取同一行数据,如果在这个过程中有其他变乱修改了此数据则会发生不可重复读

幻读:一个变乱前后读取范围的时间

变乱隔离级别:


MySQL实现变乱是基于undo/redo日志实现的:
undo日志记载修改前的状态,ROLLBACK基于UNDO日志实现;

REDO日志记载修改后的状态,变乱的持久性基于REDO日志实现


两种解决脏读、不可重复读、幻读的方案:

MVCC(性能较高,但读的可能是历史版本)

1.版本链:对于每一行的数据,在undo日志中,总会记载每个版本记载以及对应的变乱id,
2.readView:
核心题目:当前版本链中哪个版本对当前变乱可见
Readview包罗的内容:{当前活泼的变乱id,下一个应该分配的变乱id,当前本身的变乱id},根据当前读的版本变乱id和这个readview对比,如果是活泼的或者大于下一个应该分配的变乱id则阐明当前版本对此变乱不可见,应该前读一个版本,依次类推直到找到可见的版本
提交读:每次读取数据前都会天生一个readview
可重复读:在第一次读取时句时天生一个readview


锁(性能不高,但读的是最新版本):


MyISAM和innoDB的区别

1.innodb支持行锁,myisam不支持行锁

2.innodb支持变乱,myisam不支持变乱

3.innodb支持回滚和安全回复,myisam不支持

4.innodb的索引就是数据,myisam的索引只存储了主键和行号,还须要根据行号去查找相应的记载

5.innodb更得当写麋集的表,myisam更得当读麋集的表


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

郭卫东

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表