`

高性能mysql[第2版]--阅读笔记

阅读更多
$$$ 数据类型
索引列尽量是 NOT NULL

实数
浮点类型(float(4字节)、double(8字节))和decimal类型(转为double计算)
cpu可以直接计算浮点类型,但不能计算decimal类型
每4个字节保存9个数字,小数点1个字节

varchar(N)存储长度: N+额外长度(1字节n<=255,2字节n>255)
          更新时若原位置不适合新长度:myisam 拆分行,innodb分页保存
     memory引擎char与varchar都是定长保存
     N越小,排序效率越高,内存表(都是定长)空间越小

blob、text类型
    排序仅适用max_sort_length规定的前N个字节进行排序

enum --不建议使用
    变为整数进行保存,空间小
    缺点:需要进行额外转换才能显示字符串,
          添加/删除enum集时需要alter table
          比较时转为字符串进行比较

日期
    datetime:8字节、时区无关,1001-9999年
    timestamp:4字节、保存1970.1.1以来的秒数,依赖于时区,1970-2038
                当用bigint保存,则范围会变更大(目前不支持)


$$$ 索引
结构
   通常都是B+Tree,但NDB Cluster内部使用T-Tree,特点:
       数据存储有序
       叶子节点包含指向下一个节点的联接

存储方式
   MYISAM 前缀压缩,引用行的物理位置(当行位置变更时需要更新索引)
       主键索引与辅助索引一样
   INNODB 不压缩,引用主键值(只要主键不变,即使位置变了也不需要更新索引)
       主键索引与辅助索引不一样.主键索引叶子节点保存(主键值,事务ID,MVCC回滚指针及其余列数据),而辅助索引保存(key值,主键值)
       如果索引列中没有主键,主键仍会保存在索引中
       如果索引中已包含主键,则不会重复保存,只保存索引列中未使用的主键
      建议:定义索引时最后把主键带上,因为server层并不知道索引中含主键

哈希索引
   memory引擎默认hash索引(innodb是自适应,不能控制),并且支持不唯一哈希索引,相同hash码的行指针(与myisam索引结构相同)以链表方式保存
   特征:适用于等值查找

使用
   适合全键值、键值范围、键前缀查找(大字符串索引)
   索引选择性越高,过滤的行数越多。所以越高越好,聚集索引、唯一索引的选择性最高,只后命中1行。
   索引覆盖查询:myisam压缩存储,效率更高,innodb索引中包含主键值
   使用索引进行group、order

   导致索引无法生效的错误用法:
   > 条件(where / group)没有从索引(a,b)最左列开始,即跳过a列直接使用b列
   > 不在索引(a)列上进行任何运算。例如:a+1<10,to_days(a)<10等
   > 用联合索引(a,b,c)进行 group 、order时,
     左侧列是等值查找,用到索引,例如
      where a=10 group by b,c OR where a=10 and b=10 group by c
      where a=10 order by b,c OR where a=10 and b=10 order by c
     左侧列是范围查找,不会用到索引,例如
      where a>10 group by b,c OR where a=10 and b>10 group by c
      where a>10 order by b,c OR where a=10 and b>10 order by c
    > 用联合索引(a,b,c)进行order by时
      要保持采用同样的升/降序,用到索引,例如
      ORDER BY a ASC,b ASC,c ASC 或者 ORDER BY a DESC,b DESC,c DESC
      如果混用,不会用到索引,例如
      ORDER BY a ASC,b DESCSC,c ASC 或者 ORDER BY a DESC,b DESC,c ASC
   > 选择性低的索引可能比全表扫描效率更差。比如性别列,由于性别分布基本是1:1,即使有索引也要扫描一半的表数据。

analyze table
   重新生成索引统计,使得mysql优化器评估时更准确

optimize table
   整理表空间碎片,提高访问速度,但不影响查询计划
   也可通过alter table tb_name engine=原引擎;



插入非递增主键缺点:
> 大量随机IO查找插入新行的目标页面(可能已被flush到磁盘并从缓存移走)
> 为新行进行分页,导致移动大量数据
> 因分页导致页面稀疏和不规则填充,碎片化。需要optimize table重新组织表


$$$ 锁
计数表设计
   单行无主键:表锁,并发差
   多行有主键:行锁,提高并发,查询时进行sum


$$$ DDL加速
    需提前备份数据
不进行重建表
  移除anto_increment属性
  更改enum、set常量

步骤
   1、create table tb_new like tb_old;
   2、在tb_new上进行属性修改
   3、FLUSH WITH READ LOCK.关闭所有正在使用表并且防止任何表被打开
   4、交换tb_old.frm,tb_new.frm文件
   5、UNLOCK TABLES.释放锁



$$$ explain/profile
> explain
    查询状态:
      sleep:等待客户端新查询
      query:a、正在执行查询,b、往客户端发送数据
      lock:等待锁
      分析统计:优化器正在分析执行计划
      拷贝到磁盘:线程内存不足,要保存到磁盘上。
                  大查询(group,order)或alter 大表
      排序结果(sorting):在内存中对结果排序
      发送数据:a、在各个状态间传递数据,b、产生结果,c、把结果返给客户端
  

myisam缓存
缓存命中率:100-((key_reads * 100)/key_read_requests)
缓存使用率: 100-((key_blocks_unused * key_cache_block_size) *100 / key_buffer_size)

innodb缓冲池
buffer pool:延迟写入,但若过大当检查点或插入缓存合并时会变慢
线程缓存thread_cache_size:检测thread_connected值在min--max变化,则将thread_cache_size设为max-min.每个线程大小一般为256K



sync_binlog
一条数据都不能丢: sync_binlog = 1;
可以丢部分数据,假设可以接受丢10秒的数据: sync_binlog = 10*每秒DML数量;并且和性能之间做权衡
分享到:
评论

相关推荐

    高性能mysql第三版word+pdf版电子文件

    在《高性能MySQL》第三版中,你可以学到以下核心知识点: 1. **MySQL体系结构**:了解MySQL服务器的工作原理,包括存储引擎、查询处理、优化器和执行器等关键组件。 2. **性能优化**:学习如何通过索引策略、查询...

    高性能MySQL 第三版读书笔记 一至六

    【高性能MySQL 第三版读书笔记 一至六】主要涵盖了MySQL服务器优化、操作系统和硬件优化、复制技术、可扩展性方案、MySQL分支与变种以及高可用性策略等多个方面。以下是对这些知识点的详细说明: 1. **优化服务器...

    高性能mysql学习笔记

    ### 高性能MySQL学习笔记:查询性能优化与实践 #### 一、查询性能低下的原因与分析步骤 查询性能低下通常归因于访问了过多的数据。优化查询性能的关键在于识别并减少不必要的数据访问。具体可以通过以下两个步骤...

    《高性能 MySQL》第三版学习笔记.zip

    以上内容只是《高性能 MySQL》第三版中的一部分精华,实际的学习笔记将更详细地探讨这些主题,同时可能还会包括案例研究、实战经验分享以及作者的独到见解。通过深入学习和实践,读者能够全面提升对MySQL的驾驭能力...

    《高性能Mysql》(第三版) 学习笔记、摘要.zip

    《高性能MySQL》(第三版) 是一本经典的数据库技术书籍,主要涵盖了MySQL的性能优化、高可用性、可扩展性和安全性等方面的知识。以下是对该书学习笔记和摘要的详细解析: 一、性能优化 1. 查询优化:理解SQL执行的...

    最新MySQL笔记.pdf

    Oracle数据库以性能和稳定性著称,但价格较高,因此在对稳定性要求极高的金融领域得到广泛应用。MySQL则以其免费、开源的特性在互联网公司中使用率排名第一,也是本系列学习的重点。 3. MySQL安装:用户可以通过...

    高性能MySQL笔记

     2.使用索引覆盖扫描来返回记录,在所有需要用到的列都是索引,直接从索引中过滤不需要的记录并返回结果,这是在MySQL服务器层完成的,无须回表查询记录。  3.从数据表中返回数据,这是在MySQL服务器层完成的,...

    mysql开发-main笔记

    2. **数据库设计**:笔记可能涵盖数据库模式设计,如ER图(实体关系图)的绘制,以及如何通过范式理论(第一范式到第五范式)优化数据结构,避免数据冗余和不一致。 3. **索引与性能优化**:MySQL中的索引可以极大...

    MySQL大佬姜承尧47完整课程笔记,进阶涨薪必看,内含MySQL配置文件

    2. **数据库设计**:包括ER模型(实体-关系模型),范式理论(第一范式到第五范式),以及如何优化数据库结构以提高性能。 3. **索引**:索引是提高数据库查询速度的关键。笔记会讲解不同类型的索引,如B-Tree、...

    mysql笔记.zip

    4. 规范化设计:理解第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及BCNF,提高数据的一致性和减少冗余。 王勇老师的MySQL教程日志将帮助你从基础到深入地学习这个强大的数据库系统,无论你是初学者还是...

    mysql高性能学习

    《高性能MySQL(第2版)中文版》是这方面的权威著作,由施瓦茨等专家撰写。这本书深入探讨了MySQL的内部工作原理,提供了大量关于性能优化的实际案例和建议,包括查询优化、存储引擎的选择、索引设计、复制与高可用...

    笔记-MySQL.pdf

    3. **高性能索引的创建**:索引是提升查询性能的关键。B-Tree、Hash、Full-text等类型的索引各有优劣,理解如何创建和使用合适类型的索引,以及避免全表扫描,对于优化查询至关重要。 4. **MySQL性能优化**:包括...

    wirsharke数据包分析实战(第2版)---笔记.docx

    ### Wirsharke数据包分析实战(第2版)知识点总结 #### 一、Wirsharke概述 - **定义**:Wireshark是一款全球最流行的网络封包分析软件之一,功能十分强大,可以捕获并显示通过电脑的网络适配器传输的数据包。 - **...

    架构师成长笔记 低成本和高性能MySQL云架构探索 共28页.pptx

    【低成本和高性能MySQL云架构探索】的议题主要围绕着如何在保证数据库服务质量的同时,降低运维成本和提升系统性能。此话题对于架构师来说至关重要,因为这涉及到如何有效地管理和优化大型互联网公司的数据库基础...

    MySQL学习备忘笔记.zip

    这篇“MySQL学习备忘笔记”涵盖了MySQL的基础知识、安装与配置、SQL语句、表的设计、索引、事务处理、备份与恢复、性能优化等方面,旨在帮助初学者快速掌握MySQL的核心技能。 1. **MySQL基础** - 数据库概念:理解...

    必知必会mysql学习.zip

    2. **安装与配置**:MySQL的安装过程和环境配置是学习的第一步,包括在不同操作系统上的安装方法,以及配置文件的设置。 3. **SQL语言**:SQL(Structured Query Language)是用于管理关系数据库的标准语言。我们...

    韩忠康第二版mysql视频教程笔记

    总的来说,韩忠康的第二版MySQL视频教程笔记提供了一个全面的学习路径,无论你是初学者还是有经验的开发者,都能从中获取丰富的知识和实践经验。通过系统地学习并结合实践,你将能够熟练掌握MySQL的使用,为你的项目...

    MySQL最重要的基础知识详解 中文版

    MySQL是一种关系型数据库管理系统(RDBMS),它以其高性能、可靠性和易用性而闻名。MySQL支持多种操作系统,如Windows、Linux等,并且可以运行在各种规模的服务器上,从小型个人计算机到大型企业级服务器均可。 #####...

    mysql视频教程笔记

    以上是MySQL基础的概览,传智播客的PHP培训课程中的"韩忠康PHP视频教程Mysql PPT.pptx"和"韩忠康第二版mysql视频教程笔记"将更深入地讲解这些概念,并可能包含实战示例和案例研究,以帮助学习者更好地理解和应用...

    mysql官方pdf

    - **主要特点**:包括高性能、稳定性、易于使用和强大的社区支持等。 - **历史发展**:MySQL 由瑞典公司 MySQL AB 开发,后被 Sun Microsystems 收购,最终成为 Oracle Corporation 的一部分。 ### 四、MySQL 5.7 ...

Global site tag (gtag.js) - Google Analytics