文章目录

  • 1. Mysql架构和历史
  • 2. 服务器性能剖析
  • 3. Schema与数据类型优化
    • 1. 整型比字符串类型代价更小。因为字符串需要字符集和校对规则。
    • 2. 时间类型:
    • 3. 整型类型:
  • 4. 索引
    • 2. 最左前缀:
    • 3. 覆盖索引:Select 的列,是索引中定制的列。
    • 4. 索引的作用
    • 5. 前缀索引
    • 6. 合并索引
    • 7. 聚簇索引
    • 8. 覆盖索引
    • 9. 使用索引扫描来做排序
    • 10. 压缩(前缀压缩)索引
    • 11. 冗余和重复索引
    • 12. 索引和锁
    • 13. 优化排序
  • 5. 查询优化

1. Mysql架构和历史

  1. MyISAM只是将数据写到内存中,等待操作系统定期将数据刷出到磁盘上。所以,无法保证断电,数据不丢失。
  2. infobright用于Mysql数据量过大的时候,作为数据仓库。
  3. 修改表的引擎,会丢失表原引擎所有的特性。
  4. Mysqldump进行数据导入的时候,需要注意mysqlDump默认会在create table语句之间加载drop table,不注意这点,会导致数据库中原表的数据丢失。
  5. Mysql5.5开始InnoDB才成为了Mysql的默认引擎。

2. 服务器性能剖析

  1. 性能分析工具:

    1. NewRelic。
    2. xhprof。
  2. Mysql 5.0之后,慢查询日志可以显示毫秒级别。

3. Schema与数据类型优化

1. 整型比字符串类型代价更小。因为字符串需要字符集和校对规则。

2. 时间类型:

  1. DateTime:存储时间和日期,精确到秒。 <1001年 - 9999年>
  2. TimeSamp:存储时间和日期,精确到秒。只是DateTime一半的存储空间,并且会随着时区变化,具有特殊的自动更新能力。而且允许的时间范围更小一些。<1970年1月1日 - 2038年>

3. 整型类型:

  1. 数据范围:-2^(n-1) ~ 2^(n-1) - 1, N为空间位数。 且可以选择unsigned属性,表示不能为负数,正数的上限提高一倍。 对于指定整数长度是无用的,并不能限制存储的数值范围,只是控制了一些数据库的交互工具显示的数据位数。在存储和计算上,Int(1) 和 Int(20)是一致的。

    1. tinyInt: 8位空间。
    2. smallInt:16位。
    3. MediumInt: 24位。
    4. Int: 32位。
    5. BigInt: 64位。
  2. 实数类型:对于较小的数据使用decimal存储,对于数据量较大的时候,可以考虑使用bigInt代替Decimal,后面的小数乘以相应的倍数即可。
  3. 字符串类型:对于varchar可以变长的存储数据,不会清除数据末尾的空字符串;char则是固定长度,会自动清除数据末尾的空字符串。 MYISAM默认对字符串进行压缩索引,这会导致查询慢得多,导致性能大幅度下降。

4. 索引

较好的索引使用文章

  1. Where条件列使用了索引时:先在索引上按值进行查找,然后返回包含该值的所在行。
  2. 主键索引和非主键索引是有区别的,主键索引存放的值是整行字段的数据,而非主键索引上存放的值不是整行字段的数据,而且存放主键字段的值。

2. 最左前缀:

当使用复合索引的时候,只有按照索引键顺序使用,才能使用到索引。跳过最左键则无法使用到索引。

3. 覆盖索引:Select 的列,是索引中定制的列。

4. 索引的作用

  1. 让服务器快速定位到表指定的位置。
  2. 减少了服务器需要扫描的数据量。
  3. 避免排序和临时表的产生。
  4. 将随机I/O转换为顺序I/O。

5. 前缀索引

  1. 定义: 对于Blob和Text,或是很长的varchar类型的列,若是使用普通索引,因为数据量很大,会导致索引空间剧烈增长,所以,为了减小索引空间,因此,索引前缀就好。而且对于mysql对于这三种类型,不允许索引这些列的全部长度。
  2. 计算最合适的前缀长度:COUNT(DISTINCT LEFT(name, 1)) / count(*) AS pre1。修改长度。
  3. 实现:Alter TABLE user ADD KEY (name(8)); 8:是对于name这列设置的索引前缀长度。

6. 合并索引

  1. 在mysql5.0之前,是无法把多个索引同时使用,只能使用让单个索引起效。而mysql 5.0之后,则当创建的索引存在问题,mysql会进行索引优化,把可以用到的索引,合并成一个索引使用。

7. 聚簇索引

  1. 定义: 不是索引类型,而是一种数据存储方式。在InnoDB中的聚簇索引实际上在同一个结构保存了一个B-Tree索引和数据行。索引节点对应的数据实际存放在索引的叶子页上。 因为无法同时把数据行存放在两个不同的地方,一个表中只能存在一个聚簇索引。
  2. InnoDB通过主键聚集数据。
  3. optimize table你删除数据时,mysql并不会回收,被已删除数据的占据的存储空间,以及索引位。而是空在那里,而是等待新的数据来弥补这个空缺,这样就有一个缺少,如果一时半会,没有数据来填补这个空缺,那这样就太浪费资源了。所以对于写比较频烦的表,要定期进行optimize,一个月一次,看实际情况而定了。

8. 覆盖索引

  1. 定义:select中字段,都在索引中存在,便不需要再回表查询数据。将大大提高性能。

9. 使用索引扫描来做排序

  1. mysql生成有序的结果,只能通过排序操作和按索引顺序扫描
  2. 若是explain之后的type为index,则说明使用了索引顺序扫描的方法排序。
  3. mysql可以使用同一个索引既满足排序,又满足查找行数据。
  4. 实现:
    1. 只有当索引的列顺序和ORDER BY子句的顺序完全一致,并且所有的排序方向(倒序或正序)都一样时,mysql才会使用索引来对结果做排序。
    2. 若是查询需要关联多张表,则只有当ORDER BY子句引用的字段全部为第一个表时,才能使用索引进行排序。ORDER BY也得满足索引的最左前缀。
    3. 若是索引的第一个列是常数,则ORDER BY可以不需要满足最左前缀。eg: where name = ‘Alex’ order by age。 index(name, age)。 但是,若是拍序列的顺序方向和索引顺序不一致也无法使用到索引。

10. 压缩(前缀压缩)索引

  1. 定义:通过压缩前缀,减小索引的存储空间,让更多的索引可以放入内存中。默认只能压缩字符串,整数需要通过参数设置。
  2. 计算方法:先完全保存索引块中的第一个值,然后将其他值和第一个值进行比较得到相同的前缀的字节数和剩余不同的后缀部分,把这部分呢存储起来即可。eg: 1. perform 2. performance, 存储的时候,存储的数据:7,ance。

11. 冗余和重复索引

  1. 定义:重复索引指的是在相同的列上按照相同的顺序创建相同类型的索引。

12. 索引和锁

  1. 在mysql5.1之后,InnoDB可以在服务端过滤掉行后就释放锁,但是在mysql早期版本中,只有当事务提交之后,才会释放锁。

13. 优化排序

  1. Distinct:执行之后会产生一个中间表,会降低性能,出现Using temporary。
  2. Using fileSort: 因为排序的数据过大,在文件中进行排序了,增加索引,排序字段在索引中。

5. 查询优化

  1. using(Field): field必须是两个表中一样的名称,才能使用。相当于ON的功能。
select t1.id, t1.name
from test t1
inner join test2 using (id)
等同于
inner join test2 t2 ON t2.id = t1.id
  1. 连表查询的时候,关联表拿出来的字段最好放在索引中,可是使用索引数据,不需要返回到数据行获取数据。
  2. 延迟关联:获取需要访问的记录后再根据关联列返回原表查询需要的所有列。这个技术可以用于优化关联查询中的limit子句。
问题:查询多少页的多少条数据
1.常规查询
SELECT id,name,age
FROM `user`
LIMIT 50, 52.延迟关联
SELECT  id, name, age
FRO `user`
INNER JOIN (   // 先查询出需要的id,因为id是主键存在索引,可以直接从索引中,获取到需要的id。SELECT id    // 再使用inner join,根据id,查询需要的其余列。FROM `user`LIMIT 50, 5
) as user1 USING(id)

高性能Mysql(第三版)相关推荐

  1. MySQL各种优化基于《高性能MySQL第三版》

    [TOC] MySQL各种优化 查询优化 查询优化器模块 查询优化器的任务是发现执行 SQL 查询的最佳方案.大多数查询优化器,要么基于规则.要么基于成本. 大多数查询优化器,包含 MySQL 的查询 ...

  2. 高性能mysql第三版读书笔记

    第1章 MySQL 架构与历史 MySQL最重要.最与众不同的特性是它的存储引擎架构,这种架构的设计将查询处理(Query Processing)以及其他系统任务(Server Task)和数据的存储 ...

  3. 《高性能MySQL 第四版》正式上市

    十年经典再更新 时隔十年,<高性能MySQL>再次出版,这是该系列的第四个版本.过去十年,<高性能MySQL 第三版>已经成为除了文档之外,MySQL相关开发者.DBA等从业者 ...

  4. 读薄《高性能MySql》(三)索引优化

    读薄<高性能MySql>(一)MySql基本知识 读薄<高性能MySql>(二)Scheme与数据优化 读薄<高性能MySql>(三)索引优化 读薄<高性能M ...

  5. 《高性能MySQL(第3版)》摘要——索引篇

    简介 索引是存储引擎用于快速找到记录的一种数据结构. 索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要.当数据量较少且负载较低时,不恰当的索引对性能的影响可能还不明 ...

  6. 高性能mysql总结笔记_高性能MySQL第三本笔记总结(上)

    无论何时,只要有多个查询需要在同一个时刻修改数据时,就会有并发问题.MySql主要在服务器层与存储引擎层进行并发控制. 假设数据库中国一张邮箱表,每个邮件都是一条记录.如果某个客户正在读取邮箱,同时其 ...

  7. 深入浅出的mysql第三版和第二版的区别_读《深入浅出Mysql》第二版,笔记

    买了本书,同时网上找了电子版 (My)SQL入门 DDL(Data Definition Languages) ||DESCRIBE tablename; DML(Data manipulation ...

  8. 憋个大招!高性能mysql第四版pdf在线阅读

    纯手打"RocketMQ笔记" 第一节:RocketMQ介绍 1.1 核心概念(主题.生产者.消费者.消息) 1.2 RocketMQ的设计理念和目标(设计理念.设计目标) 第二节 ...

  9. 《高性能MySQL》の复制

    2019独角兽企业重金招聘Python工程师标准>>> 0x00前言 本书讲述到定稿前的MySQL5.5版,所以下面内容的适用范围止步于MySQL5.5.本文仅仅强调书中讲述的重中之 ...

  10. 高性能MySQL(4)——查询性能优化

    査询优化.索引优化.库表结构优化需要齐头并进,一个不落. 一.为什么查询速度为变慢 在尝试编写快速的查询之前,需要清楚一点,真正重要是响应时间.如果把查询看作是一个任务,那么他由一系列子任务组成,每个 ...

最新文章

  1. Discuz学习总结——部分bug解决方案
  2. App Store内购机制
  3. 贝叶斯统计:信噪对偶与Dawid定理
  4. ARP/代理ARP的总结
  5. 企业服务与发展联盟即将正式成立
  6. python类变量共享吗_第7.12节 可共享的Python类变量
  7. [翻译] TLMotionEffect 重力感应
  8. 淘宝 - 淘宝买家信誉怎么查询?
  9. mysql中explain是什么_MySQL中EXPLAIN的解释_MySQL
  10. 电子邮件地址怎么注册填写?手机怎么注册邮箱地址?
  11. 学习笔记Java小游戏学习笔记
  12. CRT显示器和液晶显示器
  13. 什么是联盟营销以及如何使用它在网上赚更多的钱
  14. iOS客户端开发与Web前端开发
  15. pandas处理Excel基本方法
  16. C++个人财务管理系统
  17. 在windows下用命令设置代理服务器
  18. mbps和MB/s是怎么换算的
  19. 考研-英语经验贴(总结)
  20. 在c语言中调试作用是什么,调试技术在C语言程序设计教学中作用探讨.doc

热门文章

  1. linux安全检查与加固报告,linux安全加固文档分析.doc
  2. php的web表单系统源码毕设_用PHP+MySQL实现在线租房管理系统_毕业设计.doc
  3. 某软件圣天诺加密狗破解过程
  4. 6个免费下载课件的资源网站,小学、初中、高中、大学全覆盖!
  5. StringUtils.hasText()说明
  6. macOS安装配置rzsz(附博主安装过程中的错误解决)
  7. 【转载】一文读懂MCMC算法原理
  8. 归并排序JAVA实现(详解)
  9. 网页自动关机代码HTML,电脑怎么设置自动关机时间
  10. java微信测单删,免费查微信单删软件有哪些(推荐靠谱查单删APP)