oceanbase
486 строк · 11.6 Кб
1set ob_query_timeout=1000000000;
2drop database if exists px_test;
3create database px_test;
4use px_test;
5create table stu (
6sid int,
7name varchar(32),
8cls int,
9primary key (cls, sid)
10) partition by hash(sid) partitions 6;
11create table teacher (
12tid int,
13name varchar(32),
14subject varchar(4),
15primary key (tid)
16) partition by hash(tid) partitions 8;
17create table score (
18sid int,
19subject varchar(4),
20score int,
21primary key (sid, subject)
22) partition by hash(sid) partitions 6;
23insert into stu values
24(11, 'a1', 1),
25(12, 'b1', 1),
26(13, 'c1', 1),
27(21, 'a2', 2),
28(22, 'b2', 2),
29(31, 'a3', 3),
30(41, 'a4', 4),
31(42, 'b4', 4),
32(51, 'a5', 5),
33(52, 'b5', 5),
34(61, 'a6', 6),
35(62, 'b6', 6),
36(63, 'c6', 6),
37(64, 'd6', 6);
38insert into teacher values
39(1, 'Miss Zhang', 'EN'),
40(2, 'Mr Wang', 'MA');
41insert into score values
42(11, 'EN', 60),
43(12, 'EN', 70),
44(13, 'EN', 80),
45(21, 'EN', 58),
46(22, 'EN', 90),
47(31, 'EN', 80),
48(41, 'EN', 80),
49(42, 'EN', 90),
50(51, 'EN', 89),
51(52, 'EN', 99),
52(61, 'EN', 100),
53(62, 'EN', 90),
54(63, 'EN', 99),
55(64, 'EN', 87);
56insert into score values
57(11, 'MA', 60),
58(12, 'MA', 70),
59(13, 'MA', 80),
60(21, 'MA', 58),
61(22, 'MA', 90),
62(31, 'MA', 80),
63(41, 'MA', 80),
64(42, 'MA', 90),
65(51, 'MA', 89),
66(52, 'MA', 99),
67(61, 'MA', 100),
68(62, 'MA', 90),
69(63, 'MA', 99),
70(64, 'MA', 87);
71select * from stu;
72sid name cls
7311 a1 1
7412 b1 1
7513 c1 1
7621 a2 2
7722 b2 2
7831 a3 3
7941 a4 4
8042 b4 4
8151 a5 5
8252 b5 5
8361 a6 6
8462 b6 6
8563 c6 6
8664 d6 6
87select /*+ USE_PX parallel(2) */ * from stu;
88sid name cls
8911 a1 1
9012 b1 1
9113 c1 1
9221 a2 2
9322 b2 2
9431 a3 3
9541 a4 4
9642 b4 4
9751 a5 5
9852 b5 5
9961 a6 6
10062 b6 6
10163 c6 6
10264 d6 6
103select /*+ USE_PX parallel(6) */ * from stu;
104sid name cls
10511 a1 1
10612 b1 1
10713 c1 1
10821 a2 2
10922 b2 2
11031 a3 3
11141 a4 4
11242 b4 4
11351 a5 5
11452 b5 5
11561 a6 6
11662 b6 6
11763 c6 6
11864 d6 6
119select /*+ USE_PX parallel(18) */ * from stu;
120sid name cls
12111 a1 1
12212 b1 1
12313 c1 1
12421 a2 2
12522 b2 2
12631 a3 3
12741 a4 4
12842 b4 4
12951 a5 5
13052 b5 5
13161 a6 6
13262 b6 6
13363 c6 6
13464 d6 6
135select /*+ USE_PX parallel(28) */ name, cls from stu;
136name cls
137a1 1
138a2 2
139a3 3
140a4 4
141a5 5
142a6 6
143b1 1
144b2 2
145b4 4
146b5 5
147b6 6
148c1 1
149c6 6
150d6 6
151select * from teacher;
152tid name subject
1531 Miss Zhang EN
1542 Mr Wang MA
155select /*+ USE_PX parallel(2) */ * from teacher;
156tid name subject
1571 Miss Zhang EN
1582 Mr Wang MA
159select /*+ USE_PX parallel(6) */ * from teacher;
160tid name subject
1611 Miss Zhang EN
1622 Mr Wang MA
163select /*+ USE_PX parallel(8) */ * from teacher;
164tid name subject
1651 Miss Zhang EN
1662 Mr Wang MA
167select /*+ USE_PX parallel(18) */ name from teacher;
168name
169Miss Zhang
170Mr Wang
171select * from score;
172sid subject score
17311 EN 60
17411 MA 60
17512 EN 70
17612 MA 70
17713 EN 80
17813 MA 80
17921 EN 58
18021 MA 58
18122 EN 90
18222 MA 90
18331 EN 80
18431 MA 80
18541 EN 80
18641 MA 80
18742 EN 90
18842 MA 90
18951 EN 89
19051 MA 89
19152 EN 99
19252 MA 99
19361 EN 100
19461 MA 100
19562 EN 90
19662 MA 90
19763 EN 99
19863 MA 99
19964 EN 87
20064 MA 87
201select /*+ USE_PX parallel(2) */ * from score;
202sid subject score
20311 EN 60
20411 MA 60
20512 EN 70
20612 MA 70
20713 EN 80
20813 MA 80
20921 EN 58
21021 MA 58
21122 EN 90
21222 MA 90
21331 EN 80
21431 MA 80
21541 EN 80
21641 MA 80
21742 EN 90
21842 MA 90
21951 EN 89
22051 MA 89
22152 EN 99
22252 MA 99
22361 EN 100
22461 MA 100
22562 EN 90
22662 MA 90
22763 EN 99
22863 MA 99
22964 EN 87
23064 MA 87
231select /*+ USE_PX parallel(6) */ * from score;
232sid subject score
23311 EN 60
23411 MA 60
23512 EN 70
23612 MA 70
23713 EN 80
23813 MA 80
23921 EN 58
24021 MA 58
24122 EN 90
24222 MA 90
24331 EN 80
24431 MA 80
24541 EN 80
24641 MA 80
24742 EN 90
24842 MA 90
24951 EN 89
25051 MA 89
25152 EN 99
25252 MA 99
25361 EN 100
25461 MA 100
25562 EN 90
25662 MA 90
25763 EN 99
25863 MA 99
25964 EN 87
26064 MA 87
261select /*+ USE_PX parallel(8) */ * from score;
262sid subject score
26311 EN 60
26411 MA 60
26512 EN 70
26612 MA 70
26713 EN 80
26813 MA 80
26921 EN 58
27021 MA 58
27122 EN 90
27222 MA 90
27331 EN 80
27431 MA 80
27541 EN 80
27641 MA 80
27742 EN 90
27842 MA 90
27951 EN 89
28051 MA 89
28152 EN 99
28252 MA 99
28361 EN 100
28461 MA 100
28562 EN 90
28662 MA 90
28763 EN 99
28863 MA 99
28964 EN 87
29064 MA 87
291select /*+ USE_PX parallel(18) */ score, sid from score;
292score sid
293100 61
294100 61
29558 21
29658 21
29760 11
29860 11
29970 12
30070 12
30180 13
30280 13
30380 31
30480 31
30580 41
30680 41
30787 64
30887 64
30989 51
31089 51
31190 22
31290 22
31390 42
31490 42
31590 62
31690 62
31799 52
31899 52
31999 63
32099 63
321select /*+ USE_PX parallel(3) */ * from score where score > 60 and score < 90;
322sid subject score
32312 EN 70
32412 MA 70
32513 EN 80
32613 MA 80
32731 EN 80
32831 MA 80
32941 EN 80
33041 MA 80
33151 EN 89
33251 MA 89
33364 EN 87
33464 MA 87
335select /*+ USE_PX parallel(3) */ * from score where score > 60 and score < 90 and subject = 'MA';
336sid subject score
33712 MA 70
33813 MA 80
33931 MA 80
34041 MA 80
34151 MA 89
34264 MA 87
343select /*+ USE_PX parallel(3) */ * from score where score > 60 and score < 90 and subject IN ('MA', 'EN', 'HIS');
344sid subject score
34512 EN 70
34612 MA 70
34713 EN 80
34813 MA 80
34931 EN 80
35031 MA 80
35141 EN 80
35241 MA 80
35351 EN 89
35451 MA 89
35564 EN 87
35664 MA 87
357select /*+ USE_PX parallel(3) */ * from score where sid >=20 and sid <= 40 and score > 60 and score < 90 and subject IN ('MA', 'EN', 'HIS');
358sid subject score
35931 EN 80
36031 MA 80
361select /*+ USE_PX parallel(3) */ * from score where sid IN (41, 51) and score > 60 and score < 90 and subject IN ('MA', 'EN', 'HIS');
362sid subject score
36341 EN 80
36441 MA 80
36551 EN 89
36651 MA 89
367explain select /*+ USE_PX parallel(2) */ * from stu order by name desc;
368Query Plan
369==============================================================
370|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
371--------------------------------------------------------------
372|0 |PX COORDINATOR MERGE SORT | |14 |26 |
373|1 |└─EXCHANGE OUT DISTR |:EX10000|14 |18 |
374|2 | └─SORT | |14 |9 |
375|3 | └─PX BLOCK ITERATOR | |14 |7 |
376|4 | └─TABLE FULL SCAN |stu |14 |7 |
377==============================================================
378Outputs & filters:
379-------------------------------------
3800 - output([INTERNAL_FUNCTION(stu.sid, stu.name, stu.cls)]), filter(nil), rowset=16
381sort_keys([stu.name, DESC])
3821 - output([stu.name], [INTERNAL_FUNCTION(stu.sid, stu.name, stu.cls)]), filter(nil), rowset=16
383dop=2
3842 - output([stu.name], [stu.cls], [stu.sid]), filter(nil), rowset=16
385sort_keys([stu.name, DESC])
3863 - output([stu.cls], [stu.sid], [stu.name]), filter(nil), rowset=16
3874 - output([stu.cls], [stu.sid], [stu.name]), filter(nil), rowset=16
388access([stu.cls], [stu.sid], [stu.name]), partitions(p[0-5])
389is_index_back=false, is_global_index=false,
390range_key([stu.cls], [stu.sid]), range(MIN,MIN ; MAX,MAX)always true
391select /*+ USE_PX parallel(2) */ * from stu order by name desc;
392sid name cls
39364 d6 6
39463 c6 6
39513 c1 1
39662 b6 6
39752 b5 5
39842 b4 4
39922 b2 2
40012 b1 1
40161 a6 6
40251 a5 5
40341 a4 4
40431 a3 3
40521 a2 2
40611 a1 1
407select /*+ USE_PX parallel(2) */ * from stu order by name;
408sid name cls
40911 a1 1
41021 a2 2
41131 a3 3
41241 a4 4
41351 a5 5
41461 a6 6
41512 b1 1
41622 b2 2
41742 b4 4
41852 b5 5
41962 b6 6
42013 c1 1
42163 c6 6
42264 d6 6
423explain select /*+ USE_PX parallel(2) */ * from stu order by name limit 3;
424Query Plan
425================================================================
426|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
427----------------------------------------------------------------
428|0 |LIMIT | |3 |12 |
429|1 |└─PX COORDINATOR MERGE SORT | |3 |12 |
430|2 | └─EXCHANGE OUT DISTR |:EX10000|3 |10 |
431|3 | └─TOP-N SORT | |3 |8 |
432|4 | └─PX BLOCK ITERATOR | |14 |7 |
433|5 | └─TABLE FULL SCAN |stu |14 |7 |
434================================================================
435Outputs & filters:
436-------------------------------------
4370 - output([stu.sid], [stu.name], [stu.cls]), filter(nil), rowset=16
438limit(3), offset(nil)
4391 - output([stu.sid], [stu.name], [stu.cls]), filter(nil), rowset=16
440sort_keys([stu.name, ASC])
4412 - output([stu.sid], [stu.name], [stu.cls]), filter(nil), rowset=16
442dop=2
4433 - output([stu.sid], [stu.name], [stu.cls]), filter(nil), rowset=16
444sort_keys([stu.name, ASC]), topn(3)
4454 - output([stu.cls], [stu.sid], [stu.name]), filter(nil), rowset=16
4465 - output([stu.cls], [stu.sid], [stu.name]), filter(nil), rowset=16
447access([stu.cls], [stu.sid], [stu.name]), partitions(p[0-5])
448is_index_back=false, is_global_index=false,
449range_key([stu.cls], [stu.sid]), range(MIN,MIN ; MAX,MAX)always true
450select /*+ USE_PX parallel(2) */ * from stu order by name limit 3;
451sid name cls
45211 a1 1
45321 a2 2
45431 a3 3
455create table t11 (c1 int, c2 int, c3 int, c4 int) partition by hash(c1);
456select /*+use_px parallel(2) read_consistency(weak) */ t0.c1 from (select c1,c2 from t11 where t11.c1 BETWEEN 1000000000000001 and 1000000000000500) t0 join (select c1,c2 from t11 where t11.c1 BETWEEN 1000000000000001 and 1000000000000500) t1 on t0.c1=t1.c1 join (select c1,c2 from t11 where t11.c1 BETWEEN 1000000000000001 and 1000000000000500) t2 on t0.c1=t2.c1 join (select c1,c2 from t11 where t11.c1 BETWEEN 1000000000000001 and 1000000000000500) t3 on t0.c1=t3.c1 join (select c1,c2 from t11 where t11.c1 BETWEEN 1000000000000001 and 1000000000000500) t4 on t0.c1=t4.c1 join (select c1,c2 from t11 where t11.c1 BETWEEN 1000000000000001 and 1000000000000500) t5 on t0.c1=t5.c1 join (select c1,c2 from t11 where t11.c1 BETWEEN 1000000000000001 and 1000000000000500) t6 on t0.c1=t6.c1 join (select c1,c2 from t11 where t11.c1 BETWEEN 1000000000000001 and 1000000000000500) t7 on t0.c1=t7.c1 join (select c1,c2 from t11 where t11.c1 BETWEEN 1000000000000001 and 1000000000000500) t8 on t0.c1=t8.c1 join (select c1,c2 from t11 where t11.c1 BETWEEN 1000000000000001 and 1000000000000500) t9 on t0.c1=t9.c1 join (select c1,c2 from t11 where t11.c1 BETWEEN 1000000000000001 and 1000000000000500) t10 on t0.c1=t10.c1 join (select c1,c2 from t11 where t11.c1 BETWEEN 1000000000000001 and 1000000000000500) t11 on t0.c1=t11.c1 join (select c1,c2 from t11 where t11.c1 BETWEEN 1000000000000001 and 1000000000000500) t12 on t0.c1=t12.c1 join (select c1,c2 from t11 where t11.c1 BETWEEN 1000000000000001 and 1000000000000500) t13 on t0.c1=t13.c1 join (select c1,c2 from t11 where t11.c1 BETWEEN 1000000000000001 and 1000000000000500) t14 on t0.c1=t14.c1 join (select c1,c2 from t11 where t11.c1 BETWEEN 1000000000000001 and 1000000000000500) t15 on t0.c1=t15.c1 join (select c1,c2 from t11 where t11.c1 BETWEEN 1000000000000001 and 1000000000000500) t16 on t0.c1=t16.c1 join (select c1,c2 from t11 where t11.c1 BETWEEN 1000000000000001 and 1000000000000500) t17 on t0.c1=t17.c1 join (select c1,c2 from t11 where t11.c1 BETWEEN 1000000000000001 and 1000000000000500) t18 on t0.c1=t18.c1 join (select c1,c2 from t11 where t11.c1 BETWEEN 1000000000000001 and 1000000000000500) t19 on t0.c1=t19.c1;
457c1
458
459drop table if exists t1;
460create table t1(c1 int primary key, c2 varchar(10)) partition by hash(c1) partitions 2;
461insert into t1 values(1, 'aaa'),(2,'bbb');
462explain basic select * from t1 where c2 not in('', 'xxx');
463Query Plan
464=======================================
465|ID|OPERATOR |NAME |
466---------------------------------------
467|0 |PX COORDINATOR | |
468|1 |└─EXCHANGE OUT DISTR |:EX10000|
469|2 | └─PX PARTITION ITERATOR| |
470|3 | └─TABLE FULL SCAN |t1 |
471=======================================
472Outputs & filters:
473-------------------------------------
4740 - output([INTERNAL_FUNCTION(t1.c1, t1.c2)]), filter(nil), rowset=16
4751 - output([INTERNAL_FUNCTION(t1.c1, t1.c2)]), filter(nil), rowset=16
476dop=1
4772 - output([t1.c1], [t1.c2]), filter(nil), rowset=16
478force partition granule
4793 - output([t1.c1], [t1.c2]), filter([(T_OP_NOT_IN, t1.c2, ('', 'xxx'))]), rowset=16
480access([t1.c1], [t1.c2]), partitions(p[0-1])
481is_index_back=false, is_global_index=false, filter_before_indexback[false],
482range_key([t1.c1]), range(MIN ; MAX)always true
483select * from t1 where c2 not in('', 'xxx');
484c1 c2
4852 bbb
4861 aaa
487