00:00
呃,那么再往下走的话呢,咱们来看一看,关于我们现在呢,它的一个表引擎啊,关于我们这个表引擎,当我们说啊,就是我们现在呢,对于我们这个数据库来讲,对,那么它呢,有一些我们这操作引擎,像MYSO里边呢,一个是我们这个in DB,一个呢是我们这个my sum,对,那么这两个呢,我们默认用的是我们这个啊这个选的时候,其实我们的in诺DB呢,用的比较多一点,对in诺DB用的比较多一点,对吧,In诺DB呢,这是数对吧?那么咱们现在呢,在我们这个操作clean house的时候呀,那么它呢,也有我们的引擎的一个概念,对吧,那么而且呢,说这个表引擎呢,可以说是我们的clean house啊,它的一个特色,对吧?那么它作用干什么呢?它决定了怎么样去存储我们的数据,对吧,比如说数据的存储方式啊,数据的存储位置呀,对吧,可以写在哪,从哪读啊对吧,这是哪些查询呢对吧,并发对吧,这个情况呀,对吧,索引呢对吧,数据的复制参数啊等等像这些。
01:00
电呢,都可以通过我们现在它的一个引擎对吧来指定,那么具体这个引擎怎么来这个使用呢?都有哪些种呢?咱们这里啊,主要给大家介绍这几种对吧,这几种其实最主要的这几种对吧?这几种啊像这两个了解一下就行,对吧?那么我现在在使用引擎的时候注意啊同学们,那么它本身呢,它是区分大小写业的,这个要注意一下,你在指定的时候呢,这个东西严格区分大小写对吧?那么咱们第一次接触对吧,我对大家呢,对吧,它的要求对吧,很很简单,你不需要把引擎我记下来对吧,你知道哎,我现在有哪些引擎,对吧,这就OK了啊吧,这就OK了对吧,那么咱们现在呢,注意啊,我现在假如说我要去创建表的时候,那么这个引擎怎么来指定的,那就可以这样对吧,我现在比如说这是create table,然后这块的表名,然后进来这块呢,是不是它表明字段的,然后在后边通过一个in的来指定当前的引擎是什么?那第一种引擎呢,叫咱们tiny log对吧,那么这个它是。
02:00
以列文件的形式保存磁盘上,注意啊,这种形式啊,这种引擎,它表示数据呢,是以列文件的形式来保存磁盘上的,但是呢,它不支持索引,就咱们当前如果你要往这里边来放的话,它这个数据呢,它不支持索引,如果不支持索引的话,大家想一想查询效率是不是其实是比较低的,对吧,然后进来没有什么并发控制,对,那也是我现在在咱们里边它这个县城呢,也是不安全的,对,那一般情况下咱们一般干什么呢?就是生长环境一般对不用的对,就是咱们用练习的时候,对你可以用一下,到练习时可以用一下,对吧,那好了,咱们现在呢,那可以直接对吧,简单操作一下,接接在这儿呢,我们去创建的这个表,其实从我们现在啊,在这里的这跟使用上来讲,这个其实呢,短没有什么太大的区别,短其实没有什么太大的个区别,对吧,然后接下来那么咱们现在呢,在这儿对吧?在这里除了我们这个这个kdlo之外呢,还有一个什么呢。
03:00
就是我们这个内存引擎对吧?这个内存引擎呢,它是数据未压缩的原始形式,直接保存内存里边,对吧?大家想想内存呢,那应该是快对吧,这性能呢,这个这个这个如果操作它的话,这个性能呢,这很快对吧?但是呢,内存是不是有限呀,对吧?所以说呢,咱们现在就是什么呢?如果你非常重视性能对吧,但是呢,你的数据量又不会太大对吧?它上线呢,大概1亿行左右对吧?其实现在有好多情况,就比较比较比较比较有意思的个事啊,就大家再去学这个可令号的时候,有些东西在官网上并没有详细的说明,对吧?然后呢,咱们这个好多人在学习者,就在咱论坛里边,他们就讨论的测试,对,所以说你会看到一些咱们可令house描述的时候,大概大约对有好多这样的词,对就有比如说咱们在做合并的时候,你像我们说,诶我这里边在这个麦在这有一个什么呢?它有一个不是咱们那个内存吗,然后不把磁盘刷写吗?对这官网就没有这个。
04:00
明确指定说刷写时际是多少,然后这些人开始猜对吧,有人测对吧,然后后来对吧比较靠谱的大约对吧,15分钟左右对吧,大概15分钟左右是这样对吧,但当然咱们也可以指定啊,可以一会我给大家说对吧,那这块呢,这个上限啊,大概的一行左右的数据对吧,那这个时候你可以用我们这个对吧这个内存的这个引擎,但是这种情况大家想一想,如果说我现在服务器要重启的话,这个数据是不就丢了呀,对吧,这数据丢了对吧,这会了解,然后接下来,那么咱们现在呢,我要重点介绍谁呀,就是这三种对吧,就是关于我们这墨tree对吧,这个墨tree呢,它其实本身是我们这个payhouse最强大的一个标引擎,对吧,它这里边最强大的就是好多咱们现在这个,你看这两个引擎是重点,其实大家看一看后边是什么,是不是也是默认吹呀,对吧,其实都是基于它来的对吧,都是基于它来的对吧?那咱们现在呢,来看一看啊,就是默认train,它的地位呢,就相当于我们这个MYS里边的一个in利B,对吧。
05:00
而且呢,咱们在我这墨train基础上都衍示了很多小D这些对吧,那么具体咱这word train那怎么回事对吧?大家可以看到咱们假如说啊,我现在创建一张表,这个创建表的语句呢,我直接写,我不给大家啊,我直接去这个复制粘贴给大家一个人写对吧?那我现在呢,把这个拿过来,然后进来大家来读一下,我先建造语句,创建呢,当前这个table表明是它,然后呢,主要有这么几字段,Idsq ID,然后呢,咱们这个总金额以及我创建时间,那么我现在ID呢,是我们这块的整数,然后XQID是周串,然后这个金额呢,是我们DECSIM对吧,然后这个时间是deep time,对,这个是我们这个字段和类型,接下来这里指定了一个我们的引擎,这个引擎是谁呢?只不过是train,那么除了我现在引擎之外,比刚才咱们这个内存呀,Tog呀,它多了几个东西叫什么呢?Partition by primary key以及order by,像这三个东西大家虽然说在我们这里第一次见到,但是以前在别的技术里边咱们是不是接触过?
06:00
叫一看part by这干什么呗,分区的呗,一看到primary key对吧,这主键呗,一看是咱们这个order by,这应该是和排序有关的呗,对吧?那咱们就来看一看咱们这里对吧?当我现在的创建一个这个表来CTRLC对CTRLC,然后呢,把咱现在的这个表对给创建一下,那么创建完之后呢,那select的星来from t下划线,我们这个order MT对吧?那么查询一下当前表中没有数据对吧?然后接下来咱们向表中插入数据,插入数据呢,Inser into values对吧?然后咱们把这些数据呢,CTRLC给拿过来对吧?那么拿过来之后呢,注意看咱们是不是差六条数据过去啊,然后接下来我再去对我的数据呢,来做一个查询,大家看一看查询的结果对吧?是不是给咱分两段呀,你们觉得这是按什么分的,按什么是不是分区啊对吧?咱们刚才在创建的时候,它这里是有一个叫什么partition by,而且part by它指定的是谁呢?是不是指定的是我们创建时间,然后做一个格式转换,转成咱们这个年月日的形式呀,对吧,那也是按照它来进行分区,所以说呢,咱们现在你可以看到咱们整个呢,创业时间按照我的日期,对吧,6月1号一个,6月2号一个,那们整个咱们现在数据是不是被分成两个分区呀,对吧?哎,所以说咱们现在如果用默认tree的话,你可以通过partition by来指定我们现在这个分区啊,来指定我们现在分区,对吧?其实这里这三个选项第一个啊明白对吧,这呢就是我们的分区对吧,那么这个分区目录啊,那么在什么地方呢?咱们呀来带家看一下同学们,这个我们现在本身在我们这个这个这个这个这个存储数据的时候,那咱现在呢,去新克隆一个session啊克隆1SESSION,那我们说它的数据在哪。
07:49
点目录下面来的VR,然后呢,Leave下面是不是有一个什么clean号号呀,对,然后接下来咱们现在呢,呃速度LS-L杠杠L,咱来查看一下对吧,那大家看再到这里边是不是有我们现在这个这这这这么多目录啊,那你说要看数据的话,咱找谁date呗,找date,然后接下来在咱们这里边,你看这里边date下面放的是什么,是不是咱写两个库啊,那我是不是咱们默认是不是default呀,对吧?然后接下来在defult下边,那么这里你可以看到这里边是不是有三张表,咱们刚才这个表是不是叫T下划线,我们这个order MT呀,对吧?然进下来再往下一边,那你看一看咱们现在这有个什么20200601202000002这是什么?是不是咱两个分区啊,所以说咱们现在呢,再往下走对吧,再往下走啊,就咱们现在数据呢,其实它以这种形式存储的,对吧,那么你看到。
08:49
在咱们这里边它有一些内容什么呢?这里是不是有咱们这个什么列呀,对,有什么咱们这个分区的这个数据呀,然后还有一些对你看这里咱们本身的存储的时候,大家看啊,咱们说列式存储,列式存储对吧,你看这里又是创建时间对吧?然后这里边呢,有什么咱们现在SKU有什么咱们现在这个东西,对有什么ID这几个是不是咱们现在这个字段对吧?它呢在存储的时候,对对于这种形式来存储的对吧?然后呢,还有一些对吧,咱们现什么columns呀等等,而且你可以看啊,对吧,你看咱们现在这里边对吧,那其实呢,我们可以看一看,对吧,在这里看,然后再呢,这下边有一个columns。
09:37
对吧,可以看到大家看这里边咱列的信息是不是都有啊对吧,也就是我现在在存储的时候呢,它其实存储在咱这个目录下边,对吧,那你要知道对吧,所以我现在呢,在咱这里如果设定到不同的分区的话,那么咱们这个数据呢,就会保存到不同的一个分区目录里边来,这个刚才再看了对吧,而且分区之后呢,对面对涉及到跨分区的一个统计,对吧,那么咱们可零号呢,它会以分区为单位来进行处理,也就是说咱们现在相当于分家了,对吧,我在做统计的时候呢,对吧,他只会统计咱们跨对吧,这是什么对吧?统计我当前都这分区的都来进行处理,对吧?然后接下来,那我们现在啊,这里边我已经分好区了,对吧?那么这里有一个什么呢?叫数据的写入与分区的合并,什么意思说假如说啊,假如说我现在呢,我再往当前咱们这表里边,我再插入一些数据。
10:32
导我再插这个数据,那么这个时候呢,我这个数据啊,那有可能对吧,按照咱们正常情况下,那应该放到我们这个0601这个分区里边来,0602的分区里边来,对吧?诶那有可能我可以放到这里,但是呢,可林house它并没有这么干,他怎么做的呢?只要你插入数据过来,他呢,都会把咱们这个数据放到一个这个临时分区里边去,对吧,它都会放到一个临时分区里边去,对吧,而不会干什么,而不会加入到原来的分区,对吧,大家想想这是不是相当于给你响应的很快呀,对吧?然后接下来那么咱们写入后某一个时刻这一块,就是就是官网上没有同学们对吧,这个东西说写哪哪个时刻多长时间呢,对吧,大概十到15分钟后,对吧,那么这个时候呢,可house会自动的执行我们的合并操作,对吧?当然那这个东西如果你觉得它对这个时间太长的话,那你可以自己手动的通过咱们optize来执行,把咱们临时分区的数据啊,合并到这个已有分区里面来,什么意思呢?
11:33
同学们,假如说啊,我再把刚才的所尾句呢,再执行一下,对吧,我再执一下来,那么啊在这俩所里在这里来执行,那么当你执行完之后,咱们是不是就差六条数据解决啊,对吧?那你看咱们当前这里面这个数据什么样的,在ing from t下划线,我们这个order MT tree,对吧?那你会发现咱们现在六月零二号的数据是不是两条对吧?它在一个分区吗?不在嘛,对,你看这6月1号数据这个在一分区,这个是不是新差的,是不是也在另外一分区了,对吧?说明什么?说明这个东西啊,它并没有马上合并分区,而是放在他自己单独分区里去了对吧?放单独分区里面去了对吧?但是我在总体在查的时候,对吧,能够把所有数据给查出来对吧?那我现在如果要想把它合并分区的话,那这个时候咱们怎么来合并呢?对吧,咱怎么来合并,对,只能手动合并了op mind,然后接下来加什么呢?加上咱的表名的T下划线,咱们这个order。
12:33
NMT,然后接下来加一个final对吧,加一个final对吧,就是我现在要对咱们这个表来做手动合并,那么当你执行完咱们这个操作之后,咱们现在再来去执行一下我们查询这个表的操作,大家看一看这个时候是不是合并的一个分区流去了,对吧?那这会呢,你要注意一下对吧,他本身在做我们的插操作的时候,它并不会马上进行分级的合并,对吧?那么咱如果想看到效果的话,那么这块呢,也可以干什么一样可以对吧去对吧,通过咱手动合并这个方式来进行处理啊,来进行处理好了,那接下来咱们继续对吧再往下走,那么除了我们现在这个这个part拜之外呢,那咱们这里在创建表的时候,还有两个属性,一个什么呢?一个是我们这个primary key,那么另外一个呢是order by,对吧,那么其中呢,咱们这个per by分区可选,那primary key呢,这也是可选对吧,但是呢,这个比较常用,我们也说一下,那么一说primary key这个东西是不是应该表示主见呀,对吧。
13:33
那么主键在咱买里边,它的作用是干什么?第一个键索引第二个。啊,其实我们现在在我们这组件里面,它其实加了一个什么,一个索引,对还有别的吗?幂等性是吧?啊就是说唯一标记呗,对吧,其实加了一个唯一约束对吧,加了个一约束对吧,但是呢,在可令号里边,它和咱们别的数据库不太一样,它只是干什么,它只是创建了一个索引,但是它不是唯一约束。
14:04
什么意思,同学们,你看咱们刚才在执行的时候,我的主键,咱们的ID是不是主键呀,但是你看一看咱们现在这个ID多了吧,对你看咱像相同ID的是就是不是很多呀,所以说呢,这块你要注意一下这个primary key呢,这个主件其实呢,可有可无,对吧?然后接下来那么咱们现在呢,在这里它呢,可以说它呢,其实提供了索引,但是呢,不是唯一约束,那不是唯一约束的话,那就意味着什么,同学们,咱们说数据库呢,咱们在处理的时候,对吧,咱在数据这这数据在处理的时候,对吧,尤其是从卡卡里边把它消费出来,那么这个时候呢,咱们是不是得保证它的一个消费的一个精准一次性啊,对吧,那么怎么样去保证呢?那第一种方式对吧,咱们手动提交变量,然后加上命令性处理,那密令性处理的话,咱们现在如果是来sir的话,这个数据库本身是不是天然就支持密的行为啊,那你说在click house到目前为止,咱来看它这个数据库支密的行为,这是不支持的,因。
15:04
那主键都没有啊,等于主键没有,虽然说有,但是它能能够唯一标记吗?它不是唯一元束,对它做不到啊吧,做不到对吧,所以这块呢,你要注意一下对吧,那你要想保证密的性的话,那你应该怎么办?那你应该呢,提前驱虫,目前同学们咱们现在驱虫做了吗?对于我们订单宽表,咱们这个驱重是不是做了呀,对吧,其实密等性咱们已经可以保证了,对,就算你数据库里没有对吧,咱们其实在我这里边已经做密等性的保证了,对吧,好了,那么咱们现在呢,在这里对吧,一般假如说你要设置主键的话呢,那咱们呢,根据什么呢?它其实主要啊,它其实主要还是依据我们这个弹询条件对吧,什么意思来咱在这里看,在我们这个主键这里对吧,在咱主件这里对吧?那么我设置主键,它这个主要依据它条件立个VS句,对,因为它会建立一级索引嘛,对吧,那么如果说我现在呢,在咱们查询的时候,对吧,哎,那我加什么ID怎么怎么怎么样对吧,那这个时候呢,他会根据我们现在ID来进行一个我查询,而且那么他在查询的时候,这里我们说它本身会做分区,而且呢,除了分区之外,还有一个什么呢?还一个叫索引力度,对吧,这样的一个东西对吧,那么如果有人索引力度,人做力度干什么的呢?这个索引力度啊,注意它其实可以。
16:24
帮助他避免咱们这个全表扫描啊什么意思对吧?什么意思对吧,大家看说我现在呢,这个index对吧,Getrity它本身翻译过来就索引力度对吧,那么它只在咱们稀疏索引中,然后两个相邻索引对应的一个数据的间隔,注意啊索引力度这里还有一个什么叫稀疏索引对吧,什么叫稀疏索引,比如说咱们稀疏对应的一个稠密本,说我现在现在索引,比如说123是吧,456789,这这这种这叫什么,其实对应的叫稠密索引对吧,然后接下来我吸收索引,这怎么办呢?就它们不连续的,不连续的,那么咱们现在默认的情况下,它的一个我们这个间隔多少呢?这个间隔呀,是8192对吧,比如说我现在这个一对吧,然后这个呢,893了,对293了,然后再往下它又加了一个八百九二对吧,然后再往下又加了一加八百八百九二,那么咱们现在这个作用是干什么的?注意它本身在咱们这里边,它呢,诶建立一个系数索引。
17:24
注意啊,它也是个index对吧,那么这个index呢,它这里边放的是什么?放的是咱们这个索引的范围,这是一段,这是一段,然后接下来,那么咱们这边呢,放的什么,放的是我的数据啊,这边放的数据,而且咱们知道这个数据它本身在咱们放的时候,那应该是咱们有顺序的话,同学们,因为咱们在我们这个写的时候,它是顺序往这里边写的,对吧?假如说我现在呢,给你来一个512或者五百五五百五百四十六万,对吧,那我现在假如说我有这样的一个索引,那么你现在要想查询这个数据的话,那么大家想一想怎么查,原来如果没有索引的话,那我是不是得从咱们当前这个表里边做全表扫描来看一看,哎,我现在五百四六在哪?
18:08
对吧,但是现在如果有了索引的话,那这块同学们它怎么办呢?546在哪个范围里边,是不是在咱们现在一到咱们的893这个范围里边,是不是就546啊,所以说呢,那我就会从咱们当前这个范围,它的起始位置,比如说它对应的这个切位置是这块,然后结束位置对着这块来进行查找,注意啊,那么咱们虽然说我现在呢是我的索引,但是呢,当你定位到某一段之后,那么再查找的时候,它还得怎么办,是不是对我当前这一段的范围内来进行扫描啊,对吧?哎,这块呢,你要知道一下啊,这个知道一下,然后呢,咱默认值啊,这个东西基本上八个九二就可以,官方的不建议修改这值,除非呢,这列存在大量的一个重复值对吧?什么意思,比如说同学们,咱们现在呢,在这里对吧?呃,这边是存放的数据对吧,这边存放数据,然后接下来这边呢,是从我们这个零开始,这边呢是8193啊这个88192也行,对。
19:09
啊,比如说我现在啊这里对吧,它有这样的一个范围,然后接下来我现在呢,我想查询一个地区的一个什么什么情况,比如说现在到哪了呢?到北京地区,那结果发现北京地区数据量特别大,这个8193条记录根本断这放不下,还得再往这里边放了,这个又放了4000多条,对吧?那你说这个时候同学们,我是不是可以把咱们当前这个力度给他变得大一点了呀,对吧,那这样的话,咱们现在如果变大一点,那可以保证什么呢?就说当前咱们现在一个地区的数据是不是都在咱们一个索引力度里边来,对吧?就这个时候你可以把它给改一改,对吧,要不然这个呢,你就默认就行啊,你知道有这么一个东西,对什么呢?就是我们现在它的一个啊所引力度对吧,这个其实什么呀,就是根据条件,然后通过主键对吧来进行我们的一个查找,对就这个主键呢,它没有唯一性了,对吧,它只是加了一个索引对吧,加了一个索引对吧,然后加了个索引之后呢,咱们可以根据这个索引对吧来确定什么呢?来确定我数据的位置。
20:09
而且我们现在索引呢,它是我们这个系数座引,它们之间的一个索引力度是多少,是8192啊索引力度是8192,好了,这是关于我们现在呢的这个的这个的primary key索引这一块啊索引这块对吧?然后接下来那么除了我们这个呃,Partition by,还有我们这primary key之外,那还有一个叫order by,注意啊,你看他这个地位好像比primary key地位还高,比partition by地位还高,因为前面这两个都是什么呀,可选的对,但是这个东西到这什么呢?必选了,对就到这就排序order外,对吧,它变成必选了对吧?那么它在这里干什么呢?说它的作用设定了分区内的咱们这个数据按照哪些字段顺序进行有序排,有序保存,什么意思?同学们看一看,我当前执行完毕之后,对吧,我当家记完之后对吧,那么咱们这里大家看啊,本身我order y指定的是不是ID和SSKYYD啊对吧,那么咱们现在。
21:09
哎,那意味着什么呢?意味着我应该按照我们的order啊,一个订单的一个IDSQID进行排序,对吧?但是你发现咱们的102啊和H2直接跑到上面来了,那说明的101就就在这在在下边说明什么?说明咱们现在这个排序啊,不是跨分区的,不是跨分区的,如果跨分区的话,咱们现在这个101是不是应该跑到上面来,对吧?它只对咱当前分区的有有有有作用,对吧?然后你看在咱们当前这个分区里边,是不是按照101102这个顺序排下来,然后按照咱们这SQID101102104这个顺序就排下来了,对吧?所以说呢,咱们现在这里它设定了什么,设定了分区内的数据按照哪些字段短期有序的保存,这是第一个啊,第一个,然后接下来那么它本身呢,是我们当前这个引擎中,它一个必填的一个项,对比我们这property key对吧,还要重要对吧,有的时候呀,咱们后边也可以不设置主键。
22:09
但是呢,咱们对吧很多操作会依据我们的order by它的字段来进行处理的,比如说后面咱会讲我们驱重啊,或者汇总对吧这块对吧,好了,那么如果使用order by的话,那么要求什么呢?对它和主键它俩如果要加的话,那么要求主键呢,必须是我们这个order by里边字段什么意思,假如说我现在order by里边是不是有ID和SQID呀,对吧,那么你现在的主键要不然是我们这个ID对吧,要不然什么对吧,SQID要不然是它俩对吧,就是你你现在你来选的话,你必须是ally里边的对吧,包含内容好,这是关于我们现在这里面的对吧,这三个对这三个是这个属性是吧?这三个属性呃,稍停一下啊。
我来说两句