0详细安装步骤,开窗函数

  B-Tree就是我们常说的B树,一定不要读成B减树,否则就很丢人了。B树这种数据结构常常用于实现数据库索引,因为它的查找效率比较高。

1.基本概念

  • 1、备份服务器上MySQL数据库

磁盘IO与预读

磁盘读取依靠的是机械运动,分为寻道时间、旋转延迟、传输时间三个部分,这三个部分耗时相加就是一次磁盘IO的时间,大概9ms左右。这个成本是访问内存的十万倍左右;正是由于磁盘IO是非常昂贵的操作,所以计算机操作系统对此做了优化:预读;每一次IO时,不仅仅把当前磁盘地址的数据加载到内存,同时也把相邻数据也加载到内存缓冲区中。因为局部预读原理说明:当访问一个地址数据的时候,与其相邻的数据很快也会被访问到。每次磁盘IO读取的数据我们称之为一页(page)。一页的大小与操作系统有关,一般为4k或者8k。这也就意味着读取一页内数据的时候,实际上发生了一次磁盘IO。

开窗函数分为两个部分分别是

B-Tree与二叉查找树的对比

  我们知道二叉查找树查询的时间复杂度是O(logN),查找速度最快和比较次数最少,既然性能已经如此优秀,但为什么实现索引是使用B-Tree而不是二叉查找树,关键因素是磁盘IO的次数。

数据库索引是存储在磁盘上,当表中的数据量比较大时,索引的大小也跟着增长,达到几个G甚至更多。当我们利用索引进行查询的时候,不可能把索引全部加载到内存中,只能逐一加载每个磁盘页,这里的磁盘页就对应索引树的节点。

1.聚合,排名,偏移,分布函数 。

[root@localhost ] # mysqldump -h localhost -u root -proot --databases Surpass --routines > /home/SQLBackup/Surpassme_20180801.sql

一、 二叉树

我们先来看二叉树查找时磁盘IO的次:定义一个树高为4的二叉树,查找值为10:

                                                            图片 1

 

第一次磁盘IO:

                         图片 2

 

 

 第二次磁盘IO

                           图片 3

 

第三次磁盘IO:

                             图片 4

 

第四次磁盘IO:

                                   图片 5

从二叉树的查找过程了来看,树的高度和磁盘IO的次数都是4,所以最坏的情况下磁盘IO的次数由树的高度来决定。

从前面分析情况来看,减少磁盘IO的次数就必须要压缩树的高度,让瘦高的树尽量变成矮胖的树,所以B-Tree就在这样伟大的时代背景下诞生了。

2.开窗分区,排序,框架。

  • 2、查看备份后的SQL脚本

二、B-Tree

m阶B-Tree满足以下条件:

1、每个节点最多拥有m个子树

2、根节点至少有2个子树

3、分支节点至少拥有m/2颗子树(除根节点和叶子节点外都是分支节点)

4、所有叶子节点都在同一层、每个节点最多可以有m-1个key,并且以升序排列

 如下有一个3阶的B树,观察查找元素21的过程:

                                                                              图片 6

第一次磁盘IO:     

                                                           图片 7

第二次磁盘IO:

                                                  图片 8

这里有一次内存比对:分别跟3与12比对

第三次磁盘IO:

                                                     图片 9

这里有一次内存比对,分别跟14与21比对

从查找过程中发现,B树的比对次数和磁盘IO的次数与二叉树相差不了多少,所以这样看来并没有什么优势。

但是仔细一看会发现,比对是在内存中完成中,不涉及到磁盘IO,耗时可以忽略不计。另外B树种一个节点中可以存放很多的key(个数由树阶决定)。

相同数量的key在B树中生成的节点要远远少于二叉树中的节点,相差的节点数量就等同于磁盘IO的次数。这样到达一定数量后,性能的差异就显现出来了。

下面举个例子

 三、B树的新增

在刚才的基础上新增元素4,它应该在3与9之间:

                                 图片 10

                                     图片 11

                                     图片 12

 

SELECT empid, ordermonth, val,
  SUM(val) OVER(PARTITION BY empid
                ORDER BY ordermonth
                ROWS BETWEEN UNBOUNDED PRECEDING
                         AND CURRENT ROW) AS runval
FROM Sales.EmpOrders;
[root@localhost ] # du -sh /home/SQLBackup/Surpassme_20180801.sql
200M Surpassme_20180801.sql

四、B树的删除

 删除元素9:

                                  图片 13

 

                                    图片 14

sum(val)  就是集合函数

  • 3、查询服务器安装的MySQL

五、总结

  插入或者删除元素都会导致节点发生裂变反应,有时候会非常麻烦,但正因为如此才让B树能够始终保持多路平衡,这也是B树自身的一个优势:自平衡;B树主要应用于文件系统以及部分数据库索引,如MongoDB,大部分关系型数据库索引则是使用B+树实现。

 

 

over() 就是开窗     PARTITION BY empid  就是开窗分区(分组)   ORDER BY ordermonth 开窗排序  

 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW  开窗架构

[root@localhost ] # rpm -qa | grep -i mysql
  MySQL-client-5.6.38-1.el6.x86_64
  MySQL-server-5.6.38-1.el6.x86_64
  MySQL-devel-5.6.38-1.el6.x86_64

2.排名开窗函数

  • 4、停止MySQL服务

 SQL SERVER 支持4个排名函数 ROW_NUMBER,RANK,DENSE_RANK ,NTLE   来看看它们分别的作用

SELECT orderid, custid, val,
ROW_NUMBER() OVER(ORDER BY val) AS rownum,
RANK() OVER(ORDER BY val) AS rank,
DENSE_RANK() OVER(ORDER BY val) AS dense_rank,
NTILE(10) OVER(ORDER BY val) AS ntile
FROM Sales.OrderValues
ORDER BY val;
[root@localhost ] # service mysql stop

图片 15

  • 5、卸载已经安装的MySQL

可以看到 它们不同排序规则

ROW_NUMBER() 对排序字段行号进行排序  

[root@localhost ] # yum -y remove MySQL-*

RANK() 对数值进行排序 对相同数值有行号占用

  • 6、查找遗留的MySQL文件

DENSE_RANK() 也是对数值排序 如果有相同数值 依旧会按照原先行号加

NTILE 分区排序 为每一行分配一个区号 如果分10区 会对所有数据进行分区  总数据/分区数  就是每多少数据为一区

[root@localhost ] # find / -name mysql
/var/lib/mysql
/usr/lib64/mysql

ROW_NUMBER()  默认在 DISTINCT 筛选重复项之前计算

  • 7、/var/lib/mysql为本次MySQL的data目录,建议安装先备份

本文由澳门新葡亰平台官网发布于数据库,转载请注明出处:0详细安装步骤,开窗函数

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。