1. 首页
  2. IT资讯

为什么?阿里规定超过 3 张表禁止 join

“u003Cpu003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E优质文章,及时送达u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fpu003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002FRcsUnd92eoboDR” img_width=”640″ img_height=”29″ alt=”为什么?阿里规定超过 3 张表禁止 join” inline=”0″u003Eu003Cpu003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E作者| u003Cu002Ffontu003Eu003Cfont style=”vertical-align: inherit;”u003Ee71haou003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E来源| u003Cu002Ffontu003Eu003Cfont style=”vertical-align: inherit;”u003Eblog.itpub.netu002F30393770u002Fviewspace-2650450u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E上篇| u003Cu002Ffontu003Eu003Cfont style=”vertical-align: inherit;”u003ENginx从入门到实战u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch1 toutiao-origin=”h2″u003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E一,问题提出u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fh1u003Eu003Cpu003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E《阿里巴巴JAVA开发手册》里面写超过三张表禁止join,这是为什么?u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fpu003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002FRgAldtBB2iAhH0″ img_width=”925″ img_height=”129″ alt=”为什么?阿里规定超过 3 张表禁止 join” inline=”0″u003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch1 toutiao-origin=”h2″u003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E二,问题分析u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fh1u003Eu003Cpu003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E对这个物体,你是否有怀疑呢?也不知道是哪位先哲说的不要人云亦云,今天我设计sql,来验证这个物体。(实验没有从代码角度分析,目前达不到。可以把mysql当一个黑盒,使用角度来验证这个指标)验证验证的时候,会有很多发现,各位往后看。u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch1 toutiao-origin=”h2″u003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E三,实验环境u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fh1u003Eu003Cpu003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003Evmware10 + centos7.4 + mysql5.7.22u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fpu003Eu003Culu003Eu003Cliu003Eu003Cpu003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003Ecentos7内存4.5G,4核,50G硬盘。u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fpu003Eu003Cu002Fliu003Eu003Cliu003Eu003Cpu003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003Emysql配置为2G,特别说明硬盘是SSD。u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fpu003Eu003Cu002Fliu003Eu003Cu002Fulu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch1 toutiao-origin=”h2″u003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E四,我概述下我的实验u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fh1u003Eu003Cpu003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E有4张表,student学生表,teacher老师表,course课程表,sc中间关系表,记录了学生选修课程以及分数。具体sql脚本,看文章结尾,我附上。中间我自己写了造数据的脚本,也在结尾。u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fpu003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002FRgAldtP44poo4x” img_width=”827″ img_height=”404″ alt=”为什么?阿里规定超过 3 张表禁止 join” inline=”0″u003Eu003Cpu003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E实验是为解决一个问题的:查询选修“ tname553”老师所授课程的学生中,成绩最高的学生姓名及其成绩。u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E查询sql是:u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fpu003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002FRgAldtZ32cENwz” img_width=”1080″ img_height=”202″ alt=”为什么?阿里规定超过 3 张表禁止 join” inline=”0″u003Eu003Cpu003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E我来分析一下这个语句:4张表等值join,还有一个子查询。算是比较简单的sql语句了(引用ERP动就10张表的哦,已经很简单了)。我即将分解这个语句成3个简单的sql:u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fpu003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002FRgAldtl9oGO69G” img_width=”1080″ img_height=”254″ alt=”为什么?阿里规定超过 3 张表禁止 join” inline=”0″u003Eu003Cpu003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E我来分析下:第一句,就是查询最高分,得到最高分590分。第二句就是查询出最高分的学生id,得到u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fpu003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002FRgAleGZBPQeAbY” img_width=”522″ img_height=”56″ alt=”为什么?阿里规定超过 3 张表禁止 join” inline=”0″u003Eu003Cpu003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E这样的3个语句的就可以查询出来成绩最高的学生姓名及其成绩。u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E接下来我会分别造数据:1千万选课记录(一个学生选修2门课),造500万学生,100万老师(一个老师带5个学生,挺高端的吧),1000门课,。。上面的查询语句查询。其中sc表我测试了下有索引和没有索引情况,具体见如何。u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E再接下来,我会造1亿选课记录(一个学生选修2门课),5000万学生,1000万老师,1000门课。然后分别执行上述语句。最后我会在oracle数据库上执行上述语句。u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch1 toutiao-origin=”h2″u003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E五,下面两张表是测试结果u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fh1u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002FRXLfa72FbFjdAb” img_width=”889″ img_height=”542″ alt=”为什么?阿里规定超过 3 张表禁止 join” inline=”0″u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002FRXLfa7IDJKGE5S” img_width=”890″ img_height=”381″ alt=”为什么?阿里规定超过 3 张表禁止 join” inline=”0″u003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch1 toutiao-origin=”h2″u003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E六,仔细看上表,可以发现:u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fh1u003Eu003Cpu003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E1,步骤3.1没有在连接键上加索引,查询很慢,说明:“多表关联查询时,保证被关联的变量需要有索引”;u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E2,步骤6.1、6.2、6.3,换成简单sql,在数据量10亿以上,查询时间还能勉强接受。此时说明mysql查询有些吃力了,但是仍然嫩查询出来。u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E3,步骤5.1,mysql查询不出来,4表连接,对我本机mysql而言,1.5亿数据超过极限了(我调优过这个SQL,执行计划和索引都走了,没有问题,显示配置文件显示在发送数据。这个问题另外文章详谈。)u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E4,对比1.1和5.1步骤sql查询,4表连接,对我本机mysql而言,1.5千万数据查询很流利,是一个mysql数据量流利分水岭。表的容量)。u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E5,步骤5.1对比6.1,6.2,6.3,多表join对mysql来说,处理有些吃力。u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E6,超过三张表禁止联接,这个规则是针对mysql的。后续会看到我用同样的机器,同样数据量,同样内存,可以完美计算1.5亿数据量join。针对这样一个规则,对开发来说,需要把一些逻辑放到应用层去查询。u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cu002Ffontu003Eu003Cu002Fstrongu003Eu003Cstrongu003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E总结u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fstrongu003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cstrongu003Eu003Cfont style=”vertical-align: inherit;”u003E:u003Cu002Ffontu003Eu003Cu002Fstrongu003Eu003Cstrongu003Eu003Cfont style=”vertical-align: inherit;”u003E这个规则超过三张表禁止加入,由于数据量太大的时候,mysql根本查询不出来,导致阿里出了这样一个规定。u003Cu002Ffontu003Eu003Cu002Fstrongu003Eu003Cu002Ffontu003Eu003Cstrongu003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E(实际上如果表数据量少,10张表也不成问题,你自己可以试试)而我们公司支付系统朝着大规模并发目标设计的,所以,遵循这个规定。u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E在业务层面上,写简单sql,把更多逻辑放到应用层,我的需求我会更了解,在应用层实现特定的加入也容易整合。u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E温馨提示:欢迎u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003E关注u003Cu002Fiu003Eu003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fiu003Eu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003E微信u003Cu002Fiu003Eu003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fiu003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E公众号u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E:Java Java,获取更多技术博文推送。u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch1 toutiao-origin=”h2″u003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E七,让我们来看看oracle数据库的优秀表现:u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fh1u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002FRgAleH26Ur5E4O” img_width=”889″ img_height=”344″ alt=”为什么?阿里规定超过 3 张表禁止 join” inline=”0″u003Eu003Cpu003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E看步骤7.1,就是没有索引,join表很多的情况下,oracle仍然26秒查询出结果来。所以我会说mysql的join很弱。那么问题来了,为什么现在使用很多人使用mysql呢?这是另外一个问题,我会另外说下我的思考。u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E看完本篇文章,另外我还附加附件,所谓搂草打兔子。就是快速造数据。你可以自己先写脚本造数据,看看我是怎么造数据的,就知道我的技巧了。u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch1 toutiao-origin=”h2″u003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E八,附上部分截图u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fh1u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002FRgAleHHwxx5BY” img_width=”887″ img_height=”172″ alt=”为什么?阿里规定超过 3 张表禁止 join” inline=”0″u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002FRXLfaKf4rhjok4″ img_width=”889″ img_height=”474″ alt=”为什么?阿里规定超过 3 张表禁止 join” inline=”0″u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002FRXLfaKrIbVOelC” img_width=”888″ img_height=”436″ alt=”为什么?阿里规定超过 3 张表禁止 join” inline=”0″u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002FRXLfaL5HuUP6jA” img_width=”888″ img_height=”436″ alt=”为什么?阿里规定超过 3 张表禁止 join” inline=”0″u003Eu003Cpu003Eu003Cu002Fpu003Eu003Ch1 toutiao-origin=”h2″u003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E九,附上sql语句和造数据脚本u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fh1u003Eu003Cpreu003Eu003Ccodeu003Euse stu;u003Cbru003Edrop table if eu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003Exiu003Cu002Fiu003Ests student;u003Cbru003Ecreate table studentu003Cbru003E( s_id int(11) not auto_increment ,u003Cbru003Esno int(u003Cstrong toutiao-origin=”span” class=”highlight-text”u003E11u003Cu002Fstrongu003E),u003Cbru003Esname varchar(u003Cstrong toutiao-origin=”span” class=”highlight-text”u003E50u003Cu002Fstrongu003E),u003Cbru003Esage int(u003Cstrong toutiao-origin=”span” class=”highlight-text”u003E11u003Cu002Fstrongu003E),u003Cbru003Essex varchar(u003Cstrong toutiao-origin=”span” class=”highlight-text”u003E8u003Cu002Fstrongu003E) ,u003Cbru003Efather_id int(u003Cstrong toutiao-origin=”span” class=”highlight-text”u003E11u003Cu002Fstrongu003E),u003Cbru003Emather_id int(u003Cstrong toutiao-origin=”span” class=”highlight-text”u003E11u003Cu002Fstrongu003E),u003Cbru003Enote varchar(u003Cstrong toutiao-origin=”span” class=”highlight-text”u003E500u003Cu002Fstrongu003E),u003Cbru003Eprimary key (s_id),u003Cbru003Eunique key uk_sno (sno)u003Cbru003E) engine=innodb default charset=utf8mb4;u003Cbru003Etruncate table student;u003Cbru003Edelimiter $$u003Cbru003Edrop function if eu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003Exiu003Cu002Fiu003Ests insert_student_data $$u003Cbru003Ecreate function insert_student_datau003Cbru003Ereturns int deterministicu003Cbru003Ebeginu003Cbru003Edeclare i int;u003Cbru003Eset i=1;u003Cbru003Ewhile i<50000000 dou003Cbru003Einsert into student values(i ,i, concat(‘name’,i),i,case when floor(rand*10)%2=0 then ‘f’ else ‘m’ end,floor(rand*100000),floor(rand*1000000),concat(‘note’,i) );u003Cbru003Eset i=i+1;u003Cbru003Eend while;u003Cbru003Ereturn 1;u003Cbru003Eend$$u003Cbru003Edelimiter ;u003Cbru003Eselect insert_student_data;u003Cbru003Eselect count(*) from student;u003Cbru003Euse stu;u003Cbru003Ecreate table courseu003Cbru003E(u003Cbru003Ec_id int(11) not auto_increment ,u003Cbru003Ecname varchar(u003Cstrong toutiao-origin=”span” class=”highlight-text”u003E50u003Cu002Fstrongu003E)u003Cbru003Enote varchar(u003Cstrong toutiao-origin=”span” class=”highlight-text”u003E500u003Cu002Fstrongu003E), primary key (c_id)u003Cbru003E) engine=innodb default charset=utf8mb4;u003Cbru003Etruncate table course;u003Cbru003Edelimiter $$u003Cbru003Edrop function if eu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003Exiu003Cu002Fiu003Ests insert_course_data $$u003Cbru003Ecreate function insert_course_datau003Cbru003Ereturns int deterministicu003Cbru003Ebeginu003Cbru003Edeclare i int;u003Cbru003Eset i=1;u003Cbru003Ewhile i<=1000 dou003Cbru003Einsert into course values(i , concat(‘course’,i),floor(rand*1000),concat(‘note’,i) );u003Cbru003Eset i=i+1;u003Cbru003Eend while;u003Cbru003Ereturn 1;u003Cbru003Eend$$u003Cbru003Edelimiter ;u003Cbru003Eselect insert_course_data;u003Cbru003Eselect count(*) from course;u003Cbru003Euse stu;u003Cbru003Edrop table if eu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003Exiu003Cu002Fiu003Ests sc;u003Cbru003Ecreate table scu003Cbru003E(u003Cbru003Es_id int(11),u003Cbru003Ec_id int(u003Cstrong toutiao-origin=”span” class=”highlight-text”u003E11u003Cu002Fstrongu003E),u003Cbru003Et_id int(u003Cstrong toutiao-origin=”span” class=”highlight-text”u003E11u003Cu002Fstrongu003E),u003Cbru003Escore int(u003Cstrong toutiao-origin=”span” class=”highlight-text”u003E11u003Cu002Fstrongu003E)u003Cbru003E) engine=innodb default charset=utf8mb4;u003Cbru003Etruncate table sc;u003Cbru003Edelimiter $$u003Cbru003Edrop function if eu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003Exiu003Cu002Fiu003Ests insert_sc_data $$u003Cbru003Ecreate function insert_sc_datau003Cbru003Ereturns int deterministicu003Cbru003Ebeginu003Cbru003Edeclare i int;u003Cbru003Eset i=1;u003Cbru003Ewhile i<=50000000 dou003Cbru003Einsert into sc values( i,floor(rand*1000),floor(rand*10000000),floor(rand*750)) ;u003Cbru003Eset i=i+1;u003Cbru003Eend while;u003Cbru003Ereturn 1;u003Cbru003Eend$$u003Cbru003Edelimiter ;u003Cbru003Eselect insert_sc_data;u003Cbru003Ecommit;u003Cbru003Eselect insert_sc_data;u003Cbru003Ecommit;u003Cbru003Ecreate index idx_s_id on sc(s_id) ;u003Cbru003Ecreate index idx_t_id on sc(t_id) ;u003Cbru003Ecreate index idx_c_id on sc(c_id) ;u003Cbru003Eselect count(*) from sc;u003Cbru003Euse stu;u003Cbru003Edrop table if eu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003Exiu003Cu002Fiu003Ests teacher;u003Cbru003Ecreate table teacheru003Cbru003E(u003Cbru003Et_id int(11) not auto_increment ,u003Cbru003Etname varchar(u003Cstrong toutiao-origin=”span” class=”highlight-text”u003E50u003Cu002Fstrongu003E) ,u003Cbru003Enote varchar(u003Cstrong toutiao-origin=”span” class=”highlight-text”u003E500u003Cu002Fstrongu003E),primary key (t_id)u003Cbru003E) engine=innodb default charset=utf8mb4;u003Cbru003Eu003Cbru003Etruncate table teacher;u003Cbru003Edelimiter $$u003Cbru003Edrop function if eu003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-1″u003Exiu003Cu002Fiu003Ests insert_teacher_data $$u003Cbru003Ecreate function insert_teacher_datau003Cbru003Ereturns int deterministicu003Cbru003Ebeginu003Cbru003Edeclare i int;u003Cbru003Eset i=1;u003Cbru003Ewhile i<=10000000 dou003Cbru003Einsert into teacher values(i , concat(‘tname’,i),concat(‘note’,i) );u003Cbru003Eset i=i+1;u003Cbru003Eend while;u003Cbru003Ereturn 1;u003Cbru003Eend$$u003Cbru003Edelimiter ;u003Cbru003Eselect insert_teacher_data;u003Cbru003Ecommit;u003Cbru003Eselect count(*) from teacher;u003Cu002Fcodeu003Eu003Cu002Fpreu003Eu003Cpu003Eu003Cfont style=”vertical-align: inherit;”u003Eu003Cfont style=”vertical-align: inherit;”u003E这个是oracle的测试和造数据脚本u003Cu002Ffontu003Eu003Cu002Ffontu003Eu003Cu002Fpu003Eu003Cpreu003Eu003Ccodeu003Ecreate tablespace scott_data datafile ‘u002Fhomeu002Foracleu002Foracle_spaceu002Fsitpay1u002Fscott_data.dbf’ size 1024m autoextend on; u003Cbru003Ecreate tablespace scott_index datafile ‘u002Fhomeu002Foracleu002Foracle_spaceu002Fsitpay1u002Fscott_index.dbf’ size u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003E64u003Cu002Fiu003Em autoextend on;u003Cbru003Ecreate temporary tablespace scott_temp tempfile ‘u002Fhomeu002Foracleu002Foracle_spaceu002Fsitpay1u002Fscott_temp.dbf’ size u003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003E64u003Cu002Fiu003Em autoextend on;u003Cbru003Edrop user scott cascade;u003Cbru003Ecreate user scott identified by tiger default tablespace scott_data temporary tablespace scott_temp ;u003Cbru003Egrant resource,connect,dba to scott;u003Cbru003Edrop table student;u003Cbru003Ecreate table studentu003Cbru003E( s_id number(11) ,u003Cbru003Esno number(11) ,u003Cbru003Esname varchar2(50),u003Cbru003Esage number(11),u003Cbru003Essex varchar2(8) ,u003Cbru003Efather_id number(11),u003Cbru003Emather_id number(11),u003Cbru003Enote varchar2(500)u003Cbru003E) nologging;u003Cbru003Etruncate table student;u003Cbru003Ecreate or replace procedure insert_student_datau003Cbru003Eisu003Cbru003Eq number(11);u003Cbru003Ebeginu003Cbru003Eq:=0;u003Cbru003Efor i in 1..50 loopu003Cbru003Einsert u002F*+append*u002F into student select rownum+q as s_id,rownum+q as sno, concat(‘sutdent’,rownum+q ) as sname,floor(dbms_random.value(1,100)) as sage,’f’ as ssex,rownum+q as father_id,rownum+q as mather_id,concat(‘note’,rownum+q ) as note from dual connect by level<=1000000;u003Cbru003Eq:=q+1000000;u003Cbru003Ecommit;u003Cbru003Eend loop;u003Cbru003Eend insert_student_data;u003Cbru003Eu002Fu003Cbru003Ecall insert_student_data;u003Cbru003Ealter table student au003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003Eddu003Cu002Fiu003E constraint pk_student primary key (s_id);u003Cbru003Ecommit;u003Cbru003Eselect count(*) from student;u003Cbru003Ecreate table courseu003Cbru003E(u003Cbru003Ec_id number(11) primary key,u003Cbru003Ecname varchar2(50),u003Cbru003Enote varchar2(500)u003Cbru003E) ;u003Cbru003Etruncate table course;u003Cbru003Ecreate or replace procedure insert_course_datau003Cbru003Eisu003Cbru003Eq number(11);u003Cbru003Ebeginu003Cbru003Eu003Cbru003Efor i in 1..1000 loopu003Cbru003Einsert u002F*+append*u002F into course values(i , concat(‘name’,i),concat(‘note’,i) );u003Cbru003Eend loop;u003Cbru003Eend insert_course_data;u003Cbru003Eu002Fu003Cbru003Ecall insert_course_data;u003Cbru003Ecommit;u003Cbru003Eselect count(*) from course;u003Cbru003Ecreate table scu003Cbru003E(u003Cbru003Es_id number(11),u003Cbru003Ec_id number(11),u003Cbru003Et_id number(11),u003Cbru003Escore number(11)u003Cbru003E) nologging;u003Cbru003Etruncate table sc;u003Cbru003Ecreate or replace procedure insert_sc_datau003Cbru003Eisu003Cbru003Eq number(11);u003Cbru003Ebeginu003Cbru003Eq:=0;u003Cbru003Efor i in 1..50 loopu003Cbru003Einsert u002F*+append*u002F into sc select rownum+q as s_id, floor(dbms_random.value(0,1000)) as c_id,floor(dbms_random.value(0,10000000)) t_id,floor(dbms_random.value(0,750)) as score from dual connect by level<=1000000;u003Cbru003Eq:=q+1000000;u003Cbru003Ecommit;u003Cbru003Eend loop;u003Cbru003Eend insert_sc_data;u003Cbru003Eu002Fu003Cbru003Ecall insert_sc_data;u003Cbru003Ecreate index idx_s_id on sc(s_id) ;u003Cbru003Ecreate index idx_t_id on sc(t_id) ;u003Cbru003Ecreate index idx_c_id on sc(c_id) ;u003Cbru003Eselect count(*) from sc;u003Cbru003Ecreate table teacheru003Cbru003E(u003Cbru003Et_id number(11) ,u003Cbru003Etname varchar2(50) ,u003Cbru003Enote varchar2(500)u003Cbru003E)nologging ;u003Cbru003Etruncate table teacher;u003Cbru003Ecreate or replace procedure insert_teacher_datau003Cbru003Eisu003Cbru003Eq number(11);u003Cbru003Ebeginu003Cbru003Eq:=0;u003Cbru003Efor i in 1..10 loopu003Cbru003Einsert u002F*+append*u002F into teacher select rownum+q as t_id, concat(‘teacher’,rownum+q ) as tname,concat(‘note’,rownum+q ) as note from dual connect by level<=1000000;u003Cbru003Eq:=q+1000000;u003Cbru003Ecommit;u003Cbru003Eend loop;u003Cbru003Eend insert_teacher_data;u003Cbru003Eu002Fu003Cbru003Ecall insert_teacher_data;u003Cbru003Ealter table teacher au003Ci class=”chrome-extension-mutihighlight chrome-extension-mutihighlight-style-2″u003Eddu003Cu002Fiu003E constraint pk_teacher primary key (t_id);u003Cbru003Eselect count(*) from teacher;u003Cu002Fcodeu003Eu003Cu002Fpreu003E”

原文始发于:为什么?阿里规定超过 3 张表禁止 join

主题测试文章,只做测试使用。发布者:逗乐男神i,转转请注明出处:http://www.cxybcw.com/17844.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code