《高性能MySQL》学习笔记
captxb
这个作者很懒,什么都没留下…
展开
-
chapter03_架构优化和索引_0_绪论
优化通常需要取舍 (1) 添加索引可以提高查询速度,但是会减慢更新速度 (2) 计数器可以优化查询,但是增加了维护代价 …原创 2019-03-15 15:08:41 · 93 阅读 · 0 评论 -
chapter03_架构优化和索引_6_正则化和非正则化
数据库中的表 正则化:每个因素只表达一次 非正则化:存在信息冗余 示例 非正则化 employee | department | head ------------------------------------- Jones | Accounting | Jones ------------------------------------- ...原创 2019-04-03 14:48:24 · 207 阅读 · 0 评论 -
chapter01_MySQL架构_5_MySQL存储引擎
当创建一个表时,MySQL会在和表名同名的、以.frm为后缀的文件中存储__表的定义__ (例如在C:\Program Files\MySQL\MySQL Server 5.6\data\texas_holdem目录下存放着8个frm文件,代表8个表的定义) 这个目录下还能看到其他文件,有的代表数据记录,有的代表索引文件,这些文件的格式、后缀名是和存储引擎相关的,但是__.frm__是所有存储...原创 2019-04-02 11:15:21 · 129 阅读 · 0 评论 -
chapter01_MySQL架构_3_事务
ACID定义 (1) 原子性 一个事务是一个单独的内部不可分的工作单元 (2) 一致性 数据库总是从一种一致性状态转换到另一种一致性状态 (3) 隔离性 某个事务的结果只有在完成以后才对其他事务可见 (4) 持久性 一旦一个事务提交,事务所做的数据改变将是永久的 事务将导致数据库服务器要完成更多的额外工作 隔离级别 (1) 四个隔离级别 1° READ UNCOMMITED 2° READ...原创 2019-03-31 21:11:04 · 96 阅读 · 0 评论 -
chapter01_MySQL架构_2_并发控制
并发控制出现在__服务器层__(第1层)和__存储引擎层__(第3层) 读锁:共享 写锁:排他 锁粒度 减小锁粒度的__好处__:允许更多的并发修改,只要它们不冲突 坏处:消耗系统资源(获得锁、检查锁、释放锁等步骤) 表锁 (1) 既可以由MySQL本身管理,也可以由存储引擎管理 (2) 开销最小的策略是表锁 (3) 等待策略是__写者优先__:被申请的写锁可以插队 行锁 (1...原创 2019-03-31 09:16:38 · 97 阅读 · 0 评论 -
chapter01_MySQL架构_1_MySQL的逻辑架构
MySQL的逻辑架构 (1) __第一层__包括了连接处理、授权认证、安全等 服务器负责__缓存__线程,所以不是每个新的连接都要开/撤新线程(线程池) (2) __第二层__是MySQL的核心内容,包括查询解析、分析、优化、缓存、内建函数等 __查询缓存__会保存已有的查询结果,如果再次查询就直接返回缓存的结果; 分析器__会解析查询,创建内部__解析树; __优化器__会进行优化 (3)...原创 2019-03-31 09:05:18 · 195 阅读 · 0 评论 -
chapter03_架构优化和索引_5_索引和表维护
表维护的3个目标 (1) 查找和修复损坏 (2) 维护精确的索引统计 (3) 减少碎片 查找和修复损坏 (1) CHECK TABLE 可以检查一下表坏没坏 (2) REPAIR TABLE 可以修复损坏的表 (3) 不是每个存储引擎都支持CHECK TABLE和REPAIR TABLE,还可以用无操作ALTER更改一个表,让它使用指定的存储引擎 ALTER TABLE my_tabl...原创 2019-03-17 10:02:35 · 103 阅读 · 0 评论 -
chapter03_架构优化和索引_4_索引实例研究
现在的需求是一个在线约会网站的表,包括country, state, city, sex, age, eye color等列,要支持各种条件的组合搜索用户,还要对用户进行排序 由于查询的组合多种多样,所以__基于索引的排序__不太合适,应该用__文件排序__ 支持多种过滤条件 (1) 拥有许多唯一列值的列上的索引选择性强,可以更好的筛选出结果 (2) 查询组合可能是 (sex, cou...原创 2019-03-17 09:33:17 · 130 阅读 · 0 评论 -
chapter03_架构优化和索引_3_高性能索引策略
隔离列 查询中没有隔离的列,不会使用索引 隔离:既不是表达式的一部分,也不在函数中 示例 SELECT id FROM my_table WHERE id + 1 = 5; SELECT * FROM my_table WHERE TO_DAYS(current_date) >= '1970-01-01'; 都不会使用索引,必须把id列单独拿出来 前缀索引和索引选择性 (...原创 2019-03-17 08:56:22 · 94 阅读 · 0 评论 -
chapter03_架构优化和索引_2_索引基础知识
(1) 数据越多时,索引越重要 (2) 如果索引了多列数据,那么列的顺序非常重要 --> 索引的最左前缀原则 (3) 索引在__存储引擎层__实现, 而不是在服务器层 MySQL支持的索引类型 (1) BTree索引 (2) Hash索引 (3) RTree索引 BTree索引 (1) BTree索引只是一种称呼,实际实现有可能是B+树 (2) 大概的结构 指针1 key1...原创 2019-03-15 16:52:47 · 90 阅读 · 0 评论 -
chapter03_架构优化和索引_1_选择优化的数据类型
基本原则 (1) 满足需求的前提下,越小越好 能用TINYINT就不用INT (2) 越简单越好 能用整数就不用字符串(例如IP地址); 能有内置类型就不用字符串(例如日期类型) (3) 尽量避免NULL 当可为NULL的列作为索引时,每条记录需要额外的字节 -->考虑有0等特殊值代替NULL 整数 (1) TINYINT:8 SMALLINT:16 MEDIUMINT:24 IN...原创 2019-03-15 15:53:35 · 93 阅读 · 0 评论 -
chapter03_架构优化和索引_8_对存储引擎的说明
MyISAM引擎 (1) 只支持表锁,可能会成为瓶颈 (2) 不支持自动数据恢复 (3) 不支持事务,甚至不保证单个命令会被完成 (4) 只有索引会缓存在内存中,而表的数据在操作系统中,需要的时候要进行系统调用 (5) 紧密存储,磁盘占用小,顺序全表扫描快 (6) 缓存表的行数信息 Memory引擎 (1) 只支持表锁,但是一般不会成为瓶颈,因为Memory表的查询一般比较快 (2) 不支...原创 2019-04-03 16:28:05 · 66 阅读 · 0 评论