00:00
来,那么呢,给大家呢复习一下函数和存储过程,说白了就是什么?用SQL脚本语言所写的数据库编成它的功能就是完成了一批次数据的插入,换句话说,函数和存储过程的区别就是函数有返回值,而存储过程没有返回值,它们的关键词和以前差不多,你要见表叫create table,你要见所以就叫create index,那么你要见function就叫什么减函数。那么同理,如果以后同学们还会学到一个概念叫什么,是不是叫建视图,也是叫create view啊那么一回事,那么呢,由于我们现在呢要把数据库呢插入一切万而这样大数据的一次性的插入呢,都不推荐使用,我们是不是需要分阶段分批次的提交进去啊那。
01:00
那比如说我们先定给自己一个小目标,先差他50万能理解,那么这样相当于说如果1000万的数据,我要差50万分多少次啊,多少这个还还不能回答吗?多少好这种东西的话,咱们是不是要20次啊,这种情况下,凡一个东西我要重复20次,我们是不是可以用MYSQL自身SQL数据库编程,将我们需要重复20次的这种动作编成一个小模块啊,那么这个就是我们的目的和存储过程,那么我们来看。首先咱们是不是得先建表啊,好,往表里面插入1000万,那么呢,来吧,你如果愿意单独做一个大数据的database,如果你不愿意,那么这两句话是不是可以不执行啊,来吧,我们是不是先建一个部门表啊,哎,等等,我看看里面个部门表,别重名了哈,啊,好好好,是不是加了前缀了,行,我就不新鲜数据库了,那么呢,我们呢,直接干吧。
02:19
那么来第一波,我现在是不是直接往这个里面新建了一个部门表啊,那么呢,组建部门的number,部门部门号,部门名称和楼层位置,比如说人力资源部在五楼,好,那么这个时候直接将其执行。OK,那么show tables同学们请看,有了吧,好,那么再来我们这儿是不是又建了一张员工表啊,那么员工表了以后我们呢,也直接弄过来。
03:00
回撤好,下面由于在做这种大数据插入的时候,MYSQL自身会报一个错,我们需要设置参数二进制日志这样的一个开启的一个功能模块,那么呢,大家请看它如果在工作中,如果说创建函数,它会报这个函数,那内部描述的静态,那么呢,由于我们以后开启慢查询日志,我们呢,为了以后的内容呢,我们呢也先把这个给它开启明白吧,它就是一个变量,先开启一下,那么呢,我们大家可以看。现在大家看自身是不是off啊,那么好,我们呢,把这个格global b是二进制日制的一个东东啊,将其呢设置为一一了以后是不是就开启了,那么呢,上面我们的买色Q重启以后就消失了,由于我也说过我这是教学环境,那么是不是就不再复杂的把它配进这个配置文件里面了,那么当然你想一想,你在生产环境里面可不可能随时天天一高兴,每天插个几G进去,那么这样你是什么偶尔操作哈,来下面我们先来看创建函数保证每条数据它的作用是什么?返回一个随机数和随机字符串,保证每条数据都不同,什么意思呢?那么来同学们请看哈,我现在是不是有select新from EP这张表了,但是我现在是不是什么都没。
04:41
但是我们大家都知道,我现在是不是希望员工名字和他的部门编号,员工牌号是不是不一样啊,好,那么呢,我们呢来看一我这创建函数主要完成的功能是随机产生字符串和随机产生部门编号没问题吧,那么呢,就有点像什么random string random.next in特那产生一个随机数,这样就打乱我这50万条记录以后,没有一条记录名字是重复的呀。那么由于MYSQL它没有提供给我这样的A函数,比如说MYCQL,它提供了什么叫函数呢?Select now from Du,跟我讲这个now是不是MY数据库自身带的函数啊?好,大家看是不是此时此刻当前那么好一样,我现在需要有一种随机产生字符串,那么MYCQ没有。
05:41
我是要自己做一个呀,那么怎么做呢?我是不是叫要写是吗?函数啊,那么呢,什么意思呢?来我呢,现在呢把它弄过来,来解读一下这个程序可能黑白的不好看,那么同我给你成。
06:05
来,同学们请看一眼哈。那我先关一下,不害怕了吧,我们也说吧,你说好,你要说不会,或者说暂时不熟悉,没办法,下个月上班了以后,如果有一个老员工给你一个DEMO,说诶那个那位新同事,你照着我们以前的这个案例学习一下,模仿着做一个,如果企业里面有这样的机会,兄弟,阿弥陀佛,你命太好了,大部分时售就跟你说一句话,诶你干干干干个什么,往数据库里面插个1000万记录,我们要做力试,你去看吧,那时候你是不是一懵逼的,那么账请看好,建表叫table键函数是是叫create function,好re string,那么这个时候是我们自己命的函数名字啊,它呢有一个输入参数,注意泰是不是返回值啊,我们说过函数是不是叫一个返回值,简单而言,Random string随机字符串,这个函数。
07:12
不,这个功能域是我们自己定义的,然后这块line井号,END2个井号什么概念呢?你这块可以定义四个,可以定义八个,你也可以定义其他符号,就是为什么呢?默认买色票的结束每一行是用分号,由于我现在是不是需要把多行挤在一块,我是不是又改一下我的结尾不再用分号结束要用两个多点福,它代表这段程序块结束啊好,那么呢,我们可以看一下哈,大家看我们呢,研读一下declare声明了恰俊挖差100DEFAULT就是一堆26个移门小字母,26个移门大字母,那么弟兄们这样的话相当于说是不是定义了一个字符串啊,再来再定义一个return缀,说白了是不是就给它能理解这个。
08:12
那个类似于假设这个程序就是我在这定义了一个什么string类型,Result等于user点图圈。好,理解好,那么这个时候大家看默认现在是扣串好看呀,I int类型default是从零开始,那么数据相当于说负循环啊,只不过这块是不是写法不一样,那么我们的while do do while,这个是不是跟都差不多,这个N你要循环多少次,是不是听主人的命令,循环多少次就是多少次啊,那么好整过来,Return string contact是不是连接的意思啊,那么subst string就是这个,那么产生了一段随机串字符除字符串了以后,S串截取多少,我们最终把它拼接起来是不是给它呀?每干这么一次,我们往下面加一,那么这块是不就相当于一个循环,嗯。
09:21
没问题吧,有Java程序二的基础,你拿SQL只要按照这个范例和模板来编,是不是也能写呀,无非是先定义后执行啊,来下面看return s tr,最终end,好那么呢,我们呢,把这个是吗?函数直接执行完成了以后爬到我们这儿来,同学们请看现在是不是用分号可以执行的啊好,那么现在呢,由于我刚才所说过,我这个里面是不是有多个分号啊,如果说一行执行不小心提错了以后,是不是就程序执行到一半就退出了,我们最终是在是不是把这个符号看改成要两个井号才结束啊,什么意思呢?我们跑一下。
10:10
好,同学们。你看它每一行,现在是就是一行啊,那么that now from Du a跟我讲,以前我这句话是直接,好端端的好,同学们请看我现在一回车。他是不是不认了,就是circle默认每一行的分隔符,断行符是不是英文分号,但是我们由于前面有用了一堆英文分号,我们要这这段程序整体执行,是不是暂时先把它变成了两个井号啊啊,两个美元符号啊,那么好,同学们请看我现在干嘛呢?通了吗?OK哈,那么呢,没什么神奇的哈,所以说这些怎么呢,我们呢照着来,此时注意我建立一个函数,函数有返回值,它所要完成的工程是能够输入参数以后得到一个字符串,英文版的随机字符串,听懂,好,这是我们的这一步哈,那么呢,往下来随机产生部门编号,那么呢,大家看我们呢,干嘛呢,直接run。
11:33
Normal number,言下之意,我们直接也跟刚才的一样,那么呢,由于有前面的基础,我相信这个就好简单了吧,那么大家看是不是也是创建一个获得随机数的一个函数啊,然后的话呢,100乘以十是不是100~110之间部门号啊,然后循环OK跑一下来,那么这个时候同学们一回车是不是也产生了两个。
12:11
随机函数一个是字符串,一个是number欧啦,那么呢,我们到这儿结束下面创建存储过程,好。往员工表里面插入数据的存储过程,注意,现在我们可是要往应聘表里面一次性插入1000万,但是一次性我们怕压坏了,我们是不是五十万一次啊,50万做一次批处理,那么这个时候我们是不是要来干这么一个函数来依旧定义,那么来吧,我们呢,照着模板写。来看一下。Declare and这个之间是不是我们干了?来同学们,Create produce之前是不是叫function函数有返回值,而此时我们说过了insert EP是不是不用有返回值啊?那么此时我们没有返回值,我们输入两个从什么时候开始到哪一块数字的结数好往下走开,I int default,零,注意set out commit等于零,我们这块的意思是不是把自动提交设置为零啊?抬头大家都知道,如果说我现在随便写一个金色塔。
13:42
不insert,什么table book,我是不是写一次,它默认自动就提交一个卡密塔,那么这样如果你不把它先关掉,言下之意是不是你写一条音色的,他提一次协调音色的,那数据库就封了,他要是不是提50万次啊,那么现在我们能做的事情是不就50万,就做一个批处理,只提交一次啊,OK,好比呢,一一辆飞机,客人坐齐了以后,咱们是不是在一次性坐飞起飞啊,好,那么应该很简单,能理解,那么这个时候是不是这是不是repeat repeat是不是叫重复的意思啊,注意以前刚才是不是叫Y啊,就Y啊,现在是不是也可以叫repeat,说白了是就是循环,不重要,它的形式大家看。
14:28
零开始,每一次是第零次,以后就加个一啊,那么大家看音色into,言下之意是不是就把这一条语句一口气批出你的执行50万次啊,那么好,大家看有t repeat,重复一直到I等于最大number,也就是说我从什么start开始插入多少,那么我这个max number,你想差40万,这就写40万,你想差50万是是就写50万吧,OK,那么在这如果说一直到你传入到这个最大的50万完了,我是不是end repeat end以后我各位亲,我这set奥卡密是零代表把自动提交给关了,你在这块做了50万个记录,然后我这是要卡密特一次性提交,嗯,好,那么呢,End完了以后同学们全选。
15:29
好,那么呢,我们这往下一粘,然后一回车来,同学们是不是也就建好了我们的这个存储过程啊,这是插哪插员工表来。我们呢直接再往department差,那么呢,结合前面的员工的基础,我们呢跟这儿一样,代码逻辑一回事,其实质是不是以前是差,ERP表这块是差department特变化好,那么你前面建的随机数random string这块是不就用到了,好那么这个时候全学了以后同学们我们呢往下走。
16:16
来,再过来一回车,兄弟们,是不是两个函数个存储过程到此顺利建成功了,那么剩下的事情咱们是不是就得调用了?OK,那么最激动人心的时刻就是你见了以后,咱们是不是得往数据库里面插点东西了,好,那么这个时候注意员工是有一个部门的外建啊,咱们现在是不是尽量的先查部门表啊,好,那么呢,怎么调用呢?注意之前的我的定义是不是定义了以这个为结束啊,现在我要把它改回来,是不是以分号为结束了,那么这个是不是就恢复成出厂默认的分号作为分格,好以下之意呢,查几条。
17:08
这个是不是代表差十个部门编号从100开始,那么言下之意是不是就101人事部,102研发部,103财务部能理解好,那么这个时候同一我们呢先。呀,改没改就没改,现在是不是空啊哦了,那么呢,我们呢,空了以后我们先粘贴好,大家看我这是有个圈圈在转啊好,圈圈没了吧,说明是不是一次性插入十个部门收工啊,那么呢,何以见得呢?哎,各位亲,主键是不是一到十,我们是不是从100开始以后十个是不是101~110,部门名字我们是不是用我们的random那个,然后你看然后楼层位置是不是这个,那么string返回随机数的那个函数是不是被我们用到,相当于说我们自定义的插入十个部门的一个存储过程,这个存储过程里面是不是又调用了我们之前自定义的随机字符串函数啊。
18:21
好,那么呢,这个呢,有了下面的问题呢,就有点坑爹,为啥十条记录倒是爽很快,大家看是不是几乎是零秒搞定啊,那你们猜猜咱们来个50万得多长时间好那么呢,我这个机器我也不知道了哈,那么同学们我们是不是试一把看看好来我们呢,可以看执行了以后,咱们同样的调用,也就是说调用什么存储过程的关键字是不是什么好那么这个时候同学们我们呢,来看一下哈,那么呢,我们银色的给我,我看看我现在是多少万是不是,我看各是百千万五十万没错啊好,那么这个时候同学们我们等待一下。
19:15
那么呢?直接一回车,巧不巧,你们真是不心疼我的机器人,好,那么呢,我们呢,等他一会儿哈,我先暂停一下录屏。OK,经过漫长的等待,我们是不是接近花了一分17秒左右啊,那么给个面子啊,差不多是就接近80秒啊,那么好,下面咱们是不是三星from MP了,值不值行行,哎,你们这群混蛋是吧?我记住你们了,待会给你们留多留家庭作业,整死你们是吧?好,那么这个时候各位观众,我们是不是上演2016年年度大戏之黑客帝国啊,这大家看我们的员工名字啊,部门编号是不是随机分配了以后没有一个重复啊,好,已经到30多万了,是不是39万平均是不是一秒钟干他1万啊,OK,那么呢,这个时候坏了,来看哇。
20:29
OK,那么所以说哈,如果呢,你跟自己的机器过不去了以后怎么着,今儿晚上你要玩复习慢查询日志了后,把这个再多查几些东西,能能理解吗?那么呢,这个时候假设你设的慢查询日志那个确值是一秒钟,那么这个时候跟我讲后台记录是不是就来了,OK哈,那么呢,这个呢,就是我们的什么呢?往员工表里面插50万条记录,大家看我第一次是做了这么多,但是第二次有时候是不是干了三分多钟啊,哎,那么所以说这个看个人这个机器性能和系统,毕竟我们这个是拿虚拟机玩的哈,我这个本子呢,没有你们那么强悍了,那么呢,所以说我们这个就是什么千万级的数据批量脚本,OK好,那么这个时候,那么今天晚上你是不是给拿案子机器插一个试试了,好的好,那么这个呢,有这个时候我们是不是才能讲。
21:29
下面的什么更重要的性能分析脚本啊,OK。
我来说两句