300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > mysql innodb内幕_Mysql(技术内幕:InnoDB存储引擎)

mysql innodb内幕_Mysql(技术内幕:InnoDB存储引擎)

时间:2023-01-24 03:24:34

相关推荐

mysql innodb内幕_Mysql(技术内幕:InnoDB存储引擎)

什么是事务:事务是数据库的最小执行单元,由用户程序的执行而产生,在事务中对数据库的所有改变一经提交便不再修改,否则事务回滚;事务是为了保证更改数据库数据中间出现差错时前后数据库的一致性;

事务的ACID特性:1、原子性,事务是数据库操作的最小单元,事务的所有操作要么全部成功,要么全部失败回滚,利用回滚日志来执行数据库的回滚操作;2、一致性,数据库在事务执行前后保持一致的特性,所有事务对数据的读取结果是相同的;3、隔离性,事务A(B)在事务B(A)提交后执行,在事务提交之前,事务之间的修改是互相不可见的;4、持久性,事务提交之后,所有对数据库的修改均保存至数据库之中,即使系统崩溃也能够通过重做日志实现持久化;

四大隔离级别:1、读未提交:任何情况均可发生;2、读已提交:可避免出现脏读的情况;3、可重复读(mysql默认):避免出现脏读和不可重复读;4、串行化:避免脏读、不可重复读和幻读;脏读指的是事务A还未提交,事务B就把修改数据读取了;不可重复读指的是事务A读取了事务B修改的数据造成前后读取数据的不一致;幻读指的是事务A读取了事务B新增的数据造成的前后不一致;Oracle使用版本号vision来避免脏读;避免不可重复读可以添加行级锁;幻读可以添加表级锁;

封锁的粒度、锁的类型:粒度主要有行级锁和表级锁(在选择时应尽量选择修改级别的锁,比如只修改一行则加上行级锁);1、读写锁:排它锁简称写锁(X锁);共享锁简称读锁(S锁);2、意向锁:在x/S锁的基础上加入了IX/IS锁(表锁),一个事务在表中获得某个数据的读写锁,首先要获得该表的意向锁,加锁之前也要检查是否有其他事务已经增加了读写锁和意向锁;3、悲观锁和乐观锁:悲观锁对数据修改持有悲观态度,数据在事务修改过程中处于锁定状态,悲观锁的实现往往依赖数据库自身的锁机制;乐观锁认为数据一般不会发生冲突,只在数据提交更新时才正式检查数据冲突与否,如果冲突则返回错误信息给用户,让用户自行决定如何处理,乐观锁使用版本号,当更新数据时,判断当前版本号和之前读取数据时的版本号是否一致,一致则更新,否则认为数据过期;

B+Tree原理,与其他查找树的区别:1、为什么使用B树?数据库索引存储在磁盘上,我们搜索数据时不可能一次加载所有的索引,只能逐一加载磁盘页(也就是树上的节点),树的高度就代表着IO次数,我们需要竟可能的减少IO次数(也就是树的高度),所以使用B树就十分合理了,相较于红黑树,度更大,树的高度更小,磁盘IO次数减少;利用磁盘预读,每次加载节点上的数据量(索引页的大小),提高查询效率;2、B树与B+树的结构特点:B树中关键字和数据集中分布在整棵树中,关键字只出现在一个节点中,搜索可能在非叶子节点结束,搜索性能相当于二分查找;B+树关键字不保存数据,只是用来索引,所有数据都保存在叶子节点上,叶子节点本身按照关键字大小顺序排列,所有非叶子节点可以看做索引,只包含子树的最大最小关键字,每次搜索都结束于叶子节点;3、B+树的优势:(1)B+树的内部节点只是索引使用,而没有存储硬盘指针,所以每个磁盘页可以存放更多的关键字数据,即一次读入内存的数据增多,可以减少IO次数;(2)B+树每次查询都要到达叶子节点为止,所以搜索路径等长,搜索更加稳定;(3)B+树叶子节点之间以链表的形式存在,所以增加关键字和删除关键字操作更简单,也有利于范围查找;

B+树索引和hash索引?1、hash索引在单值查询时有较大的优势,一次算法便可得到相应的value值(前提是key值唯一,否则存在哈希碰撞的问题,查询效率不稳定);2、范围查询时key值经过hash算法后变得不连续,而B+树叶子节点通过链表相连,更利于范围查询;3、哈希索引无法利用索引完成排序,而B+树则根据叶子节点链表特性可以完成;

索引类别和索引优势?索引类别有单列索引和组合索引;优点:1、提高服务器查询效率(避免顺序搜索);2、将随机IO变成顺序IO(B+树叶子节点索引有序,有利于范围查询);3、直接根据索引进行排序和分组操作,实现更多功能;

Mysql优化:1、索引优化:(1),建立聚集索引,聚集索引将数据库的物理存储按照聚集索引的顺序排列,通过聚集索引的B+树可以很快查询到任何一行的全部信息;(2)、对于常查询的数据建立组合索引;(3)、对于组合索引一定考虑最左前缀原则;(4)、对于较长的数据列建立前缀索引;(5)、减少查询次数少的索引;2、查询优化:(1)使用Explain进行分析Select查询语句,重要的字段select_type:得到是简单查询、组合查询、子查询等;key:所使用的索引;rows:扫描的行数;(2)、优化数据访问:减少请求的数据量,避免使用select*(减少列),使用Limite(减少行),对经常查询的数据进行缓存;使用索引覆盖扫描(通常都是利用子查询实现这一点);(3)重构查询方式:切分大查询,大查询一次锁住数据库很多数据,阻塞其他小查询;分解大连接查询,将一个大连接查询分成对每一个单表进行查询,然后在应用程序中进行关联,避免因为某一个表出现更改导致其余表的缓存全部失效;

InnoDB与MyISAM的比较:(1)、MyISAM是非事务安全的,而InnoDB是事务安全的;(2)、MyISAM不支持外键,InnoDB支持外键;(3)、MyISAM只支持表级锁,InnoDB支持行级锁和表级锁,默认是行级锁;(4)、MyISAM支持全文索引,InnoDB不支持全文索引;(5)、MyISAM支持没有主键的表存在,InnoDB不支持没有主键;(6)、MyISAM较简单,效率上优于InnoDB,适合小型应用;(7)、MyISAM使用非聚集索引,InnoDB使用聚集索引;

非聚集索引和聚集索引:MyISAM底层B+树采用非聚集索引,保存的是键值和物理地址,还需要根据物理地址对相应的数据进行查询;InnoDB底层B+树叶子节点采用聚集索引,即保存键值和数据;聚集索引在索引有序且唯一的情况下大大提高查询的效率;

主从复制原理、作用和实现:主从复制主要是实现数据库的高可用功能,实现步骤有:1、主服务器将数据更改记录到二进制文件中,2、从服务器将主服务器的二进制日志复制到从服务器的中继日志中,3、从服务器重做中继二进制文件并将更改保存至从服务器数据库中;其中从服务器有两个线程:IO线程负责从主服务器中读取二进制日志并且写入中继日志中,Sql线程负责执行中继日志,数据库的主从复制并不能看做完全的实时同步,主服务器负担较大时存在延时;

数据库读写分离:应用端从主服务器中写入数据,而从从服务器中读取数据,这样的情况适用于高并发情况下读操作较多时,大大减轻主服务器的压力,有单独的中间件管理主从复制的服务器切换(如MySQL Proxy);

冷备份(off, 时间点上恢复):冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库。冷备份是将关键性文件拷贝到另外位置的一种说法。对于备份数据库信息而言,冷备份是最安全的方法。

冷备份的优点: 1.是非常快速的备份方法(只需拷贝文件) 2.容易归档(简单拷贝即可) 3.容易恢复到某个时间点上(只需将文件再拷贝回去) 4.能与归档方法相结合,作数据库“最新状态”的恢复。 5.低度维护,高度安全。

冷备份的缺点: 1.单独使用时,只能提供到“某一时间点上”的恢复。 2.在实施备份的全过程中,数据库必须要作备份而不能作其它工作。也就是说,在冷备份过程中,数据库必须是关闭状态。 3.若磁盘空间有限,只能拷贝到磁带等其它外部存储设备上,速度会很慢。 4.不能按表或按用户恢复。

热备份 (on, 快)热备份是在数据库运行的情况下,备份数据库操作的sql语句,当数据库发生问题时,可以重新执行一遍备份的sql语句。

热备份的优点: 1.可在表空间或数据文件级备份,备份时间短。 2.备份时数据库仍可使用。 3.可达到秒级恢复(恢复到某一时间点上)。 4.可对几乎所有数据库实体作恢复。 5.恢复是快速的,在大多数情况下在数据库仍工作时恢复。

热备份的缺点: 1.不能出错,否则后果严重。 2.若热备份不成功,所得结果不可用于时间点的恢复。 3.因难于维护,所以要特别仔细小心,不允许“以失败而告终”。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。