十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
表t的结构见MySQL索引选择规划。
创新互联公司2013年成立,是专业互联网技术服务公司,拥有项目成都网站设计、成都网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元合阳做网站,已为上家服务,为合阳各地企业和个人服务,联系电话:18980820575
Extra中包含Using filesort表示需要排序,在排序时, MySQL会为每个线程分配一块内存区域用于排序,称之为sort_buffer 。
全字段排序过程
上述语句的排序过程如下:
排序过程的发生位置?
上述排序过程可能在内存中完成,也可能需要使用外部排序,主要取决于排序所 需要的内存 和 参数sort_buffer_size。
什么是sort_buffer_size?
sort_buffer_size是MySQL为排序开辟的内存大小,如果排序的数据量小于sort_buffer_size,排序就在内存中进行,相反内存如果放不下的话,就需要借助磁盘临时文件进行排序。
如何查看是否使用了临时文件进行排序?
上图来源于MySQL官网:
rowid排序
上述的全字段排序优点是在我们整个过程中我们只对原表数据扫描了一遍,其他都在sort_buffer或者临时文件中进行,但是全字段排序也有弊端:
MySQL如何知道需要使用rowid排序?
MySQL可以通过max_length_for_sort_data参数来进行控制,如果单行的长度超过该值,MySQL会认为该行很大,需要切换到rowid算法。
rowid排序过程
根据索引直接返回
假设我们order by时有索引正好符合我们的要求,此时就不需要再借助内存或临时文件进行排序,而是直接利用有序遍历索引树直接返回结果。
利用mysql proxy来实现的。 MySQL Proxy最强大的一项功能是实现“读写分离(Read/Write Splitting)”。基本的原理是让主数据库处理事务性查询,而从数据库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从数据库。
MYSQL主从同步原理:
1) MYSQL主从同步是异步复制的过程,整个同步需要开启3线程,master上开启bin-log日志(记录数据库增、删除、修改、更新操作);
2) Slave开启I/O线程来请求master服务器,请求指定bin-log中position点之后的内容;
3) Master端收到请求,Master端I/O线程响应请求,bin-log、position之后内容返给salve;
4) Slave将收到的内容存入relay-log中继日志中,生成master.info(记录master ip、bin-log、position、用户名密码);
5) Slave端SQL实时监测relay-log日志有更新,解析更新的sql内容,解析成sql语句,再salve库中执行;
6) 执行完毕之后,Slave端跟master端数据保持一致!
**MYSQL bin-log用途**
1) bin-log日志最大的功能记录数据库增、删、改、插入等操作,记录用户操作的SQL语句;
2) bin-log日志可以用数据增量备份、完整备份;
3) bin-log还可以主要主从复制+读写分离;
索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。
索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
二叉树:当不平衡时,单边增长,可能退化为线性
红黑树:数据量大时,深度不可控
AVL树:相比较与红黑树,严格平衡,但是增删情况下,通过旋转再平衡的开销过大,适合查找场景多的应用
Hash: 不支持范围查找
平衡的多路查找树,一个结点存放多个元素。
与红黑树相比,在相同的的节点的情况下,一颗B/B+树的高度远远小于红黑树的高度(在下面B/B+树的性能分析中会提到)。B/B+树上操作的时间通常由存取磁盘的时间和CPU计算时间这两部分构成,而CPU的速度非常快,所以B树的操作效率取决于访问磁盘的次数,关键字总数相同的情况下B树的高度越小,磁盘I/O所花的时间越少。
m阶:节点中,子节点数的最大值(子节点数,不是结点存放元素)
1. 树中每个结点最多m个子树(最多m-1个关键字,两个子树夹一个关键字)
2. 根节点最少有1个关键字
3. 非根结点最少m/2个子树(m/2 - 1个关键字)
4. 每个关键字排序
5. 所有的叶子结点位于同一层
6. 每个结点都存有索引和数据
(1)简介
B+树是应文件系统所需而产生的一种B树的变形树(文件的目录一级一级索引,只有最底层的叶子节点(文件)保存数据)非叶子节点只保存索引,不保存实际的数据,数据都保存在叶子节点中。所有的非叶子节点都可以看成索引部分!
(2)B+树的性质(下面提到的都是和B树不相同的性质)
1. b+树有两种类型的结点:
1.1 内部结点(索引结点,非叶结点): 只存索引,不存数据
1.2 叶子结点 (存数据)
2. 内部结点 和 叶子结点的 key递增排序
3. 每个叶结点存有相邻叶结点的指针
4. 父结点存有右孩子第一个元素索引
1.磁盘io代价低:b+树的非叶结点只存储索引,不存储数据,单一结点能存放的索引数更多,树更矮胖
2. b+树查询效率稳定:所有查询必须到叶节点
3. b+树叶子节点为有序表,效率更高,支持范围查询。