1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 高性能MySQL(第二版)第三章 架构优化和索引(上)——读书笔记

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

时间:2018-11-11 19:59:17

相关推荐

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

一,选择优化的数据类型更小通常更好更小的数据类型使用了更少的磁盘,内存和CPU缓存 但是要确保不要低估需要保存的值,在架构中的多个地方增加数据类型的范围是一件极其费时费力的工作。如果不确定需要什么数据类型,就选择你认为不会超过范围的最小类型。简单就好越简单的数据类型,需要的CPU周期就越小。例如,比较整数的代价小于比较字符,因为字符集和排序规则使字符比较更复杂。这里有两个例子:一是应该使用MySQL内建的类型来保存日期和时间,而不是使用字符串;二是应该尽量使用整数来保存IP地址尽量避免NULLMySQL难以优化引用了可空列的查询,它会使索引,索引统计或值变得更加复杂。

二,索引基础知识 索引(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>selectselect 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的第二索引在叶子节点中保存了行的主键值。因此,覆盖了查询的第二索引在主键中避免了另外一次索引查找。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。