随笔分类 -  mysql

摘要:1.首先客户端通过tcp/ip发送一条sql语句到server层的SQL interface2.SQL interface接到该请求后,先对该条语句进行解析,验证权限是否匹配3.验证通过以后,分析器会对该语句分析,是否语法有错误等4.接下来是优化器器生成相应的执行计划,选择最优的执行计划5.之后会是 阅读全文
posted @ 2021-07-20 19:27 我是张某某 阅读(668) 评论(0) 推荐(0)
摘要:一、脏读,幻读,不可重复读概念 脏读:脏读是指一个事务中访问到了另外一个事务未提交的数据 如果会话 2 更新 age 为 10,但是在 commit 之前,会话 1 希望得到 age,那么会获得的值就是更新前的值。或者如果会话 2 更新了值但是执行了 rollback,而会话 1 拿到的仍是 10。 阅读全文
posted @ 2021-03-10 11:20 我是张某某 阅读(712) 评论(0) 推荐(0)
摘要:一、全字段排序 例子:select city,name,age from t where city='杭州' order by name limit 1000 ; 查询流程如下: 图中“按 name 排序”这个动作,可能在内存中完成,也可能需要使用外部排序,这取决于排序所需的内存和参数 sort_b 阅读全文
posted @ 2021-02-22 15:03 我是张某某 阅读(192) 评论(0) 推荐(0)
摘要:一、count(*)的实现方式 1.MyISAM 引擎把一个表的总行数存在了磁盘上,因此执行 count(*) 的时候会直接返回这个数,效率很高,(但是如果加了where条件,就不会这么快了) 2. InnoDB 引擎就麻烦了,它执行 count(*) 的时候,需要把数据一行一行地从引擎里面读出来, 阅读全文
posted @ 2021-02-22 14:42 我是张某某 阅读(356) 评论(0) 推荐(0)
摘要:InnoDB体系结构 缓冲池(buffer pool):缓存的数据类型如下图所示 数据页:聚集索引页(自增主键有顺序) 索引页:其他辅助索引页(插入没有顺序) 1.重做日志缓冲:会有三种情况将重做日志缓冲中的内容刷新到磁盘的重做日志文件中 (1):Master Thread 每秒将重做日志缓冲刷到重 阅读全文
posted @ 2021-01-08 14:49 我是张某某 阅读(139) 评论(0) 推荐(0)
摘要:1.隔离性与隔离级别 当数据库上有多个事务同时执行的时候,就可能出现脏读(dirty read)、不可重复读(non-repeatable read)、幻读(phantom read)的问题,为了解决这些问题,就有了“隔离级别”的概念。 SQL 标准的事务隔离级别包括:读未提交(read uncom 阅读全文
posted @ 2020-12-28 12:01 我是张某某 阅读(212) 评论(0) 推荐(0)
摘要:根据加锁的范围,MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类 一、全局锁 典型使用场景是,做全库逻辑备份(在备份过程中整个库完全处于只读状态) 有两个风险点 1.如果在主库上备份,那么在备份期间都不能执行更新,业务基本上就得停摆; 2.如果在从库上备份,那么备份期间从库不能执行主库同步过 阅读全文
posted @ 2020-12-25 11:10 我是张某某 阅读(336) 评论(0) 推荐(0)
摘要:一、索引数据结构 索引就是排好序的数据结构 (索引和表数据都是存储到磁盘) 索引数据结构: 二叉树:缺点:特殊情况 在查找记录时跟没加索引的情况是一样(key:所要查询的值 value:指针) 红黑树:缺点:在数据量大的时候,深度也很大 树的高度不可控 高度过高导致查询性能不快 Hash表:对key 阅读全文
posted @ 2020-12-22 09:52 我是张某某 阅读(210) 评论(0) 推荐(0)
摘要:一、基础架构图 1.MySQL的框架的几个组件 连接器:负责跟客户端建立连接、获取权限、维持和管理连 查询缓存:查询请求先访问缓存(key 是查询的语句,value 是查询的结果)。命中直接返回。不推荐使用缓存,更新会把缓存清除(关闭缓存:参数 query_cache_type 设置成 DEMAND 阅读全文
posted @ 2020-12-15 10:30 我是张某某 阅读(164) 评论(0) 推荐(0)