首页 > 数据库 >河北王校长MySQL

河北王校长MySQL

时间:2023-05-19 20:55:30浏览次数:47  
标签:bin log 河北 视图 索引 MySQL 校长 隔离

河北王校长MySQL

索引

  • b+树数据结构\数量级\存储内容
  • b+树优势、对比哈希表\数组\b树\跳表
    • 跳表不适用磁盘存储介质、指针管理难以适应联合索引、出现时间晚
    • hash不支持最左前缀和范围查找
    • 数组成本过高
    • b树树型过高,io多
  • 最左前缀原则
  • 索引覆盖
  • 索引下推
  • 扩充
    • show index 命令后查看 Cardinality 可以了解离散程度

索引失效

  • 索引失效
    • %like
    • or条件有非索引
    • 联合查询不满足最左前缀原则
    • 运算
    • isnot != <>成本过高
    • is null/is not null成本过高
    • 函数操作
    • 类型隐式转换(convert)
  • 补充
    • 对于null值优化 强制非空\默认值
    • select * from table where index > 3
      • MySQL5.5 由于回表离散读的问题,索引可能会失效
      • MySQL5.5+ mrr优化解决离散读,一般会使用索引

mvcc、隔离级别、问题、锁

  • mvcc
    • 一致性非锁定读
    • MySQL基于自己回滚机制为并发常场景的优化
  • 隔离级别中的mvcc
    • ru:直接返回记录上的最新值,没有视图概念。
    • rc:视图是在每次SELECT时生成的。(违背了事务ACID里的隔离性)
    • rr:视图是在第一次SELECT时创建的,事务读取期间的SELECT都用这个视图。(此隔离级别下需要利用间隙锁来解决幻读问题)
    • s:直接用加锁的方式来避免并行访问,没有视图概念。
  • 隔离级别中的问题
    • ru:脏读、幻读、不可重复读
    • rc:幻读、不可重复读
    • rr:幻读
    • Record Lock:单个行记录上的锁
    • Gap Lock:间隙锁,锁定一个范围,但不包含记录本身
    • Next-Key Lock:Gap Lock+Record Lock,锁定一个范围,并且锁定记录本身

日志

  • MySQL插入瓶颈
    • 自增id(id并发瓶颈)
      • 5.1.22前 auto inc locking
      • 5.1.22后 多模式 全互斥量\全锁\混合
      • 主从同步SBR会导致数据不一致,需要修改为RBR
    • commit(磁盘写入瓶颈)
      • 事务提交时会调用 fsync 对 redo log 进行刷盘,将redo log buffer刷新到redo log file
        • 事务提交时必须调用一次fsync操作
        • 表示事务提交时不进行写入重做日志操作,这个操作仅在master thread中完成,而在master thread中每1秒会进行一次重做日志文件的fsync操作。
        • 事务提交时将重做日志写入重做日志文件,但仅写入文件系统的缓存中,不进行fsync操作
      • 批量插入
  • redo log
  • uodo log
  • bin log

分布式

  • 隔离级别
    • rc
      • 违背隔离性,可接受,体现真实数据变迁
      • 其他情况代码处理
      • 推荐
  • MySQL5.0
    • rC隔离级别,bin log只有statment模式,会导致主从复制数据不一致,被迫使用rr
  • MySQL5.1
    • rC隔离级别,bin log引入row、mix模式
  • MySQL5.1.22
    • 自增主键引入互斥量,配合rc的rbr,主从复制插入性能最佳
  • MySQL5.5
    • 主从复制异步bin log同步,半同步复制,至少保证一个从服务器接受bin log
  • MySQL5.6
    • mrr解决离散读问题
  • MySQL5.6
    • 主从复制异步bin log同步,增强半同步复制,至少保证一个从服务器将bin log写入relay log
  • MySQL5.7
    • 多线程复制技术(从库)
  • MySQL8.0
    • 同事务多线程复制技术
  • MySQL集群架构
    • 多主互为主从,每个主服务器挂载多个从服务器
      • 无法再挂一层,将binlog写入relaylog再执行将自身binlog传递成本太高
    • 数据库分片中间件,多主互为补充,每个主服务器挂载多个从服务器

补充

  • flc
  • Online DDL
  • 倒排索引
  • 自增主键实现
  • 自适应哈希索引
  • 更新丢失
  • 死锁
    • 超时回滚
    • 等待图
  • 分布式事务
  • MySQL语句执行原理

标签:bin,log,河北,视图,索引,MySQL,校长,隔离
From: https://www.cnblogs.com/faetbwac/p/17416256.html

相关文章

  • jsp页面连接mysql数据库报错“com.mysql.jdbc.Driver”
    今天在做web实验的时候数据库突然连不上了以下是报错我用的mysql包为mysql-connector-java:5.1.47找了好久后来在一篇博客的启发下,那篇博客中说把一般包为web下lib目录中后来我仔细观察,发现我添加的包在WEBINF目录下的classes下的lib中,难怪找不到我把它移动到外面就可以了......
  • mysql按顺序递增(出现不连续问题)
    问题在表中添加新记录时,自动递增不连续(之前出现过了473,之后删除473,再插入新纪录,新纪录的id是474,我想让他的id为8)(用springboot+mybatis-plus插入新纪录)解决第一步1.如果是InnoDB引擎:将该字段先取消“自动递增”,去掉“不是null”的对勾,取消“主键”,并保存。如下图设置:第二......
  • .NET6 + EF Core + MySQL 创建实体和数据库、EFCore 数据迁移
    前言接上期文章《.NET6项目连接数据库方式方法》,有人问了我几个问题,现在就这几个问题,拓展延申一下创建实体类、数据库。把ORM框架和数据迁移都写进去。安装ORM框架,这里我们采用EFCore安装EFCore我的项目是在Linux上创建的,使用的是vscode开发工具远程开发。为了方便大家阅读和......
  • MySQL 插入数据
    MySQL插入数据MySQL表中使用INSERTINTOSQL语句来插入数据。你可以通过mysql>命令提示窗口中向数据表中插入数据,或者通过PHP脚本来插入数据。语法以下为向MySQL数据表插入数据通用的INSERTINTO SQL语法:INSERTINTOtable_name(field1,field2,...fieldN)......
  • mybatis plus实体类中字段映射mysql中的json格式方式
    packagecom.example.springbootstudy.entity;importcom.baomidou.mybatisplus.annotation.TableField;importcom.baomidou.mybatisplus.annotation.TableId;importcom.baomidou.mybatisplus.annotation.TableName;importcom.baomidou.mybatisplus.extension.handlers.Fas......
  • Mysql基础语法
    根据分组,查询最新时间的一条数据-基础语法select*fromtablewhereidin( selectSUBSTRING_INDEX(GROUP_CONCAT(idORDERBYupdate_timedesc),',',1) fromtableGROUPBYunique_key_column);-创建数据库dropdatabaseifexists`syntax_db`;createdat......
  • MySQL 处理重复数据
    MySQL处理重复数据有些MySQL数据表中可能存在重复的记录,有些情况我们允许重复数据的存在,但有时候我们也需要删除这些重复的数据。本章节我们将为大家介绍如何防止数据表出现重复数据及如何删除数据表中的重复数据。防止表中出现重复数据你可以在MySQL数据表中设置指定的......
  • MySQL 索引
    MySQL索引MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。拿汉语字典的目录页(索引)打比方,我们可以按拼音、笔画、偏旁部首等排......
  • MySQL数据库远程连接开启方法
    1.先控制台进入mysql-uuser-ppassword2.在mysql控制台执行GRANTALLPRIVILEGESON*.*TO'username'@'%'IDENTIFIEDBY'password'WITHGRANTOPTION;(这里的username和password,单独在弄一个用户名和密码,别用root)3.然后再MySQL>FLUSHPRIVILEGES;......
  • MySQL数据库的性能优化配置 五
    (一)减少数据库访问对于可以静态化的页面,尽可能静态化对一个动态页面中可以静态的局部,采用静态化部分数据可以生成XML,或者文本文件形式保存使用数据缓存技术,例如:MemCached (二)优化的检测方法1.用户体验检测2.Mysql状态检测在Mysql命令行里面使用showstatus命令,得到当前mysql状......