一,选择优化的数据类型

更小通常更好
更小的数据类型使用了更少的磁盘,内存和CPU缓存
但是要确保不要低估需要保存的值,在架构中的多个地方增加数据类型的范围是一件极其费时费力的工作。如果不确定需要什么数据类型,就选择你认为不会超过范围的最小类型。
简单就好
越简单的数据类型,需要的CPU周期就越小。例如,比较整数的代价小于比较字符,因为字符集和排序规则使字符比较更复杂。这里有两个例子:一是应该使用MySQL内建的类型来保存日期和时间,而不是使用字符串;二是应该尽量使用整数来保存IP地址
 尽量避免NULL
MySQL难以优化引用了可空列的查询,它会使索引,索引统计或值变得更加复杂。
二,索引基础知识
索引(index)是帮助MySQL高效获取数据的数据结构。它对于高效能至关重要,因此建立索引(Indexing)是现实中高性能的首要因素。
索引在数据量越大的时候,越重要。理解索引如果工作的最简单方式就是把它看做成一本书。为了找到书中特定的话题,你只需要查看目录,它就会把对应的页码告诉你。
1. B-Tree索引
a. B-Tree通常意味着数据存储是有序的
b. B-Tree索引加速了数据访问,因为存储引擎不会扫描整个表得到需要的数据。
c. 列顺序极其重要

三,高性能索引策略
1.隔离索引的列
      如果在查询中没有隔离索引的列,MySQL通常不会是使用索引。"隔离"列意味着它不是表达式的一部分,也没有位于函数中。
例如:下面的查询不能使用actor_id上的索引:
mysql>select actor_id from sakila.actor where actor_id +1 = 5;
人们能轻易的看出where子句的actor_id等于4, 但是mysql不会帮你求解方程。正确的写法应该是这样的:
mysql>select select actor_id from sakila.actor where actor_id  = 4;
2.前缀索引和索引选择性
3.聚集索引
       <1>.什么是聚集索引
a.聚集索引是存储数据的一种方式
b.聚集索引叶子节点包含了行的全部数据,但是节点页(叶子节点的父节点?) 只含有被索引的列 
<2>.聚集索引的优点和缺点
优点:
1.可以把相关数据保存在一起。例如:当实现电子邮箱的时候,可以按照user_id进行聚集,这样从磁盘上提取几个页面的数据就能把某个用户的邮件全部抓取出来。如果没有使用聚集,读取每个邮件都会访问磁盘。
          2.数据访问快,聚集索引把索引和数据都保存到了同一个B—Tree中,从而从聚集索引中取得数据通常比在非聚集索引进行查找要快。
3.使用覆盖索引的查询可以使用包含在叶子节点的主键值。
缺点:
1.聚集能最大限度的提升I/O密集负载的性能。如果数据能装入内存,那么其顺序也就无所谓了,这样聚集就没有什么用处(这句话的含义不是很清楚)
2.插入速度严重依赖于插入顺序。按照主键的顺序插入行是把数据装入InnoDB表最快的方法。如果没有按照主键顺序插入数据,那么在插入之后最好使用OPTIMIZE TABLE重新组织一下。
3.更新聚集索引列是昂贵的,因为它强制InnoDB把每个更新的行移动到新的位置
4.聚集和非聚集的区别(详见本书88页)
5.覆盖索引:
覆盖索引,索引里就包含查询所需要的数据。MySQL能使用索引来接受列的数据,因为索引的叶子节点包含了他们索引的数据。
覆盖索引的优势(只需要读取索引,而不是数据的优势)
1.索引记录通常远小于全行大小,因此,如果只读取索引,MySQL就能极大的减少数据访问量。这对缓存的负载是非常重要,它大部分的响应时间都花在拷贝上。对于I/O密集型的负载也有帮助。因为索引比数据小很多,能更好的被装入内存。
2.索引是按照索引值进行排序的(至少在页内如此),因此IO密集型访问将会比随机从磁盘上提取每一行数据要快的多。
3.大部分存储引擎缓存索引比缓存数据更好。
4.聚集索引对于InnoDB特别有用。InnoDB的第二索引在叶子节点中保存了行的主键值。因此,覆盖了查询的第二索引在主键中避免了另外一次索引查找。

高性能MySQL(第二版)第三章 架构优化和索引(上)——读书笔记相关推荐

  1. 数据结构(C语言)第二版 第三章课后答案

    数据结构(C语言)第二版 第三章课后答案 1~5 C C D A A 6~10 D A B C D 11~15 D D B C B 1.选择题 (1)若让元素1, 2, 3 , 4, 5 依次进栈,则 ...

  2. 数据结构c语言版第二版第三章课后答案,数据结构(C语言版)习题集答案第三章.doc...

    数据结构(C语言版)习题集答案第三章.doc 习题三3.1 3.10 3.13 3.5 3.6 3.15 3.17 3.19 3.24 3.29 3.31 3.51 给定操作序列P1P2P3PiPn( ...

  3. windows网络编程第二版 第三章 Internet Protocol 读书笔记

    1. 本章主要讲述IP方面的东西,解释了IPv4, IPv6.在后面的两个章节中,讲述了地址和名字的解析(Address and Name Resolution),以及如何书写一个IPv4, IPv6 ...

  4. 具体数学第二版第三章习题(2)

    16 根据$n$%3等于 0,1,2列三个方程然后计算出$a,b,c$的值,$a=1,b=\frac{w-1}{3},c=-\frac{w+2}{3}$ 17 $\sum_{0\leq k<m} ...

  5. 《Python数据分析》第二版.第三章.[学习笔记][Jupyter notebook]

    第3章 Python的数据结构.函数和文件 1.元组是一个固定长度,不可改变的Python序列对象 tup = 4, 5, 6 nested_tup = (4, 5, 6), (7, 8) #复杂元组 ...

  6. 李航老师《统计学习方法》第二版第三章课后题答案

    其他章节答案请参考我的汇总统计学习方法答案汇总,都是自己写的. 1.参照图3.1,在二维空间中给出实例点,画出 kkk 为1和2时的 kkk 近邻法构成的空间划分,并对其进行比较,体会 kkk 值的选 ...

  7. 笔记:模拟CMOS集成电路设计(拉扎维)第二版--第三章--单级放大器增益(更新2022.12.26)

    目录 共源级 源跟随器 共栅级 共源共栅级 总结(更新2022.12.26) 整理了一些单级放大器电路增益的笔记,按照共源级.源跟随器.共栅级和共源共栅级顺序,分享一下~ 共源级 源跟随器 共栅级 共 ...

  8. Javascript高级程序设计第二版第四章--变量,作用域及内存问题--笔记

    由于JavaScript 变量松散类型的本质,决定了它是在特定时间用于保存特定值的一个名字而已,变量的值及其数据类型可以在脚本的生命周期内改变.这可能既有趣又强大,同时又容易出问题. 4.1 语法 E ...

  9. SQL基础教程MICK版 ···第三章总结

    SQL基础教程MICK版 ···第三章总结 SELECT语句 关于上表的语句顺序 和 执行顺序 完整的语法结构 GROUP BY需要注意的点 用于限定GROUP BY的 HAVING子句 关于ORDE ...

最新文章

  1. 程序员们,不妨高调一点儿!2021,一起冲!
  2. 深入理解 C 指针阅读笔记 -- 第四章
  3. Avdshare Audio Converter 7中文版
  4. RPA技术干货 | RPA防锁屏运行技巧
  5. struts 2 配置通配符
  6. java接口源码_java collection接口源码
  7. 【thinkphp】ThinkPHP各个低版本(=3.2)完全配置参考手册
  8. NOIP模拟题——计数
  9. 【Flink】Flink 源码之Buffer Debloating
  10. 看淘宝UED招聘题,思索FSE技能定位(附参考答案)
  11. 4.15_strategy_行为型模式:策略模式
  12. MVC 从客户端中检测到有潜在危险的 Request.Form 值
  13. 《完整部署 OCS-NG》
  14. Struts框架介绍(重点)
  15. python用的编程软件是什么,python编程软件用哪个好
  16. 安装windows server2008虚拟机
  17. 姓氏头像制作生成头像组合微信小程序源码
  18. 用学校邮箱使用微软OneDrive云存储空间5120G
  19. STM32F100R4 单片机解密特性 ST芯片解密
  20. 暖风熏的游人醉 直把杭州作汴州 题临安邸--林升

热门文章

  1. 中移M5311-NBIOT-OPENCPU开发-HTTP串口收发器
  2. Shamir密钥分享算法 python实现
  3. 创建的函数带有编译错误。_AST实现函数错误的自动上报(原理到实践)
  4. python发送文件_python:socket传输大文件
  5. java ldap 实例_JAVA_基本LDAP操作实例
  6. 一些知名的J2me优秀开源UI项目
  7. ReactNative 问题集合
  8. 图的广度优先遍历和深度优先遍历
  9. JS 回车快捷键登陆页面 兼容火狐和IE
  10. 注解返回html页面,【提问】ajax请求返回整个html页面