MySQL基础理论

MySQL

理论知识点:索,锁机制,主从复制集群

索引
  • 索引机制:B+Tree,磁盘可决定B+Tree的高度h,当树的高度越小时,磁盘IO的次数越小,性能越优。
  • 索引匹配原则:最左匹配原则,一直向右匹配,遇到范围条件(>,<,between,like)时会停止匹配,即之后的索引会导致失效(建立索引要注意顺序)。
  • 索引建立原则:最左匹配原则(建立索引需要考虑顺序)、区分度优先原则(优先选用区分度比较明显的字段作为索引字段)、不参与计算原则(索引字段不能参与计算,否则不能触发索引)、优先采用扩展索引,减少新建索引(如采用联合索引)。
  • sql优化常用命令:explain命令
字段json值词义
idselect_idThe SELECT identifier
select_typeThe SELECT type
tabletable_name语句包含的表名
partitionspartitionsThe matching partitions
typeaccess_typejoin连接的类型
possible_keyspossible_keys可能触发的索引
keykey实际触发的索引
key_lenkey_length字段的长度
refref列和索引之间的比较
rowsrows估计要检查的行
filteredfiltered按表条件过滤的行百分比
ExtraNone额外的信息
锁机制

锁的分类:乐观锁、悲观锁、共享锁、分布式锁、独占锁、公平锁、非公平锁、自旋锁

  • 悲观锁:一般常用的有表锁、行锁,会导致线程阻塞,所以称为悲观,(当有一个线程在操作时,阻止其他进程一切操作,锁表)
  • 乐观锁:mysql本身并无乐观锁,但提供mvcc(多版本并发控制),mysql innodb引擎提供的事务(乐观锁),多个事务同时执行先后顺序取决于mysql自身处理。
  • 共享锁:允许其他线程同时读数据,当不允许同时进行写入操作,对写入加锁,保证数据的正确性。
主从复制集群

关键词:二进制日志、中继日志、master、slave

  • 二进制日志:一般在数据目录里面,通常格式为mysql-bin.xxxxxx,日志会执行滚动操作,如当日志大小达到最大上限时,或者执行FLUSH LOGS,或者服务器重新启动时
  • 中继日志:从服务器I/O线程将主服务器的二进制日志读取过来记录到从服务器本地文件,然后从服务器SQL线程会读取relay-log日志的内容并应用到从服务器,从而使从服务器和主服务器的数据保持一致。
  • master:在主从复制中,通常会有一个或多个主服务器被称为master,向从服务器同步数据
  • slave:这些从服务器就称为slave

主从复制原理:主要用于实现读写分类,分摊负载,降低服务器压力;通过主服务器(以下称master)进行数据写入操作,master首先将这些操作写入二进制日志文件,并且再写入数据文件中,启用DUMP线程通知其他服务器(以下称slave)数据发生变化,slave通过IO Thread向master同步二进制日志保存到本地的中继日志中,SQL Thread启动监听中继日志的改变,通过本地重放进行数据的复制。其他服务器并不接收写入操作,而是实时同步主服务器二进制文件,保持数据一致性。
需要注意的是:

  1. 如果在多主从配置中,中继日志是不能用于同步的,还需要在生成二进制日志,如A->B->C,其中B生成的中继日志不可以用于B->C,需要B生成二进制日志,同A->B原理进行同步。
  2. 如果主从架构采用简单的架构进行复制,那么master就需要为每一个slave创建复制线程,负载仍然较大,所以通常需要使用多级复制,减轻master的负担。

数据同步的三种模型:异步、半同步、同步

  • 异步:mysql的默认同步策略,保证写入操作的速度。只要数据写入master就视为成功同步。
  • 半同步:只要有一个节点(slave)数据插入成功就代表同步成功。
  • 同步:主从服务器速度一致,需要从服务器写入操作完成,才算同步完成,会影响插入数据的速度,一般情况下不会使用。

后续有更多的内容会继续补充,暂时先更新一下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值