patch 4.0
This commit is contained in:
@ -63,6 +63,7 @@ select 20*1/1000 * 0.95(min_distinct 20);
|
||||
select c1 from t1 where c1 <= 500;
|
||||
select 20*1/1000 * 0.95;
|
||||
select c1 from t1 where c1 >= 10000;
|
||||
#T_OP_NE 未做处理
|
||||
select 1 - 1/1000*0.95 - 100/10000
|
||||
select c1 from t1 where c1 != 500;
|
||||
select 1 - 1/1000*0.95 - 100/10000
|
||||
@ -75,6 +76,7 @@ select 1 - 1/1000*0.95 - 100/10000
|
||||
select c1 from t1 where c1 * 2 != 50;
|
||||
select 0.5
|
||||
select c1 from t1 where c1 / 2 != 50;
|
||||
# and && or 混合 A and B: A*B, A OR B : A + B - A*B
|
||||
select (10000-2000)/(10000-1000)*0.95;
|
||||
select c1 from t1 where c1 > 2000;
|
||||
select (3000-1000)/(10000-1000)*0.95;
|
||||
@ -91,6 +93,7 @@ select (10000-9000)/(10000-1000)*0.95;
|
||||
select c1 from t1 where c1 > 9000;
|
||||
select (8000-1000)/(10000-1000)*0.95;
|
||||
select c1 from t1 where c1 < 8000;
|
||||
#以上为所需单个条件的选择率
|
||||
select (3000-2000)/(10000-1000)*0.95;
|
||||
select c1 from t1 where c1 > 2000 and c1 < 3000;
|
||||
select 0.019;
|
||||
@ -183,7 +186,7 @@ select 1/1000*0.95;
|
||||
select c1 from t1 where c1 between 1000 and 1000;
|
||||
select 0.95;
|
||||
select c1 from t1 where c1 not between 1000 and 1000;
|
||||
select 0;#bug 8551829 :6;
|
||||
select 0;考虑设最低选择率;#bug 8551829 :6;
|
||||
select c1 from t1 where c1 between 10000 and 1000;
|
||||
select 1;
|
||||
select c1 from t1 where c1 not between 10000 and 1000;
|
||||
@ -197,12 +200,12 @@ select (2000-1000)/(10000-1000)*0.95;
|
||||
select c1 from t1 where 2000 between c1 and 10000;
|
||||
select (10000-8000)/(10000-1000)*0.95;
|
||||
select c1 from t1 where 2000 not between c1 and 10000;
|
||||
|
||||
#btw的最小选择率暂时未设置,这里会直接为0
|
||||
select 0;
|
||||
select c1 from t1 where 1000 between 10000 and c1;
|
||||
select (10000-2000)/(10000-1000)*0.95;
|
||||
select c1 from t1 where 2000 between 1000 and c1;
|
||||
|
||||
#常量这种情况暂时未做计算 #bug 8551829 :5;
|
||||
select 1;
|
||||
select c1 from t1 where 1 between 0 and 1;
|
||||
select 0;
|
||||
|
@ -1,74 +1,74 @@
|
||||
EXPR_STR: select c1 from t4 where c1 > '20150305123012';
|
||||
SELECTIVITY = 0.808483
|
||||
SELECTIVITY = 0.333333
|
||||
|
||||
EXPR_STR: select c1 from t4 where c1 = '20150305123012';
|
||||
SELECTIVITY = 0.01
|
||||
SELECTIVITY = 0.0001
|
||||
|
||||
EXPR_STR: select c1 from t4 where c1 > '00000101000000';
|
||||
SELECTIVITY = 1
|
||||
SELECTIVITY = 0.333333
|
||||
|
||||
EXPR_STR: select c1 from t4 where c1 < '00000101000000';
|
||||
SELECTIVITY = 0.02
|
||||
SELECTIVITY = 0.333333
|
||||
|
||||
EXPR_STR: select c1 from t4 where c1 > '99991231235959';
|
||||
SELECTIVITY = 0.01
|
||||
SELECTIVITY = 0.333333
|
||||
|
||||
EXPR_STR: select c1 from t4 where c1 < '99991231235959';
|
||||
SELECTIVITY = 1
|
||||
SELECTIVITY = 0.333333
|
||||
|
||||
EXPR_STR: select c1 from t4 where c2 > '20150305123012';
|
||||
SELECTIVITY = 0.516212
|
||||
SELECTIVITY = 0.333333
|
||||
|
||||
EXPR_STR: select c1 from t4 where c2 = '20150305123012';
|
||||
SELECTIVITY = 0.01
|
||||
SELECTIVITY = 0.00095
|
||||
|
||||
EXPR_STR: select c1 from t4 where c2 > '00000102080000';
|
||||
SELECTIVITY = 0.633968
|
||||
SELECTIVITY = 0.333333
|
||||
|
||||
EXPR_STR: select c1 from t4 where c2 < '00000102080000';
|
||||
SELECTIVITY = 0.0100002
|
||||
SELECTIVITY = 0.333333
|
||||
|
||||
EXPR_STR: select c1 from t4 where c2 > '99991230235959';
|
||||
SELECTIVITY = 0.0100002
|
||||
SELECTIVITY = 0.333333
|
||||
|
||||
EXPR_STR: select c1 from t4 where c2 < '99991230235959';
|
||||
SELECTIVITY = 0.633968
|
||||
SELECTIVITY = 0.333333
|
||||
|
||||
EXPR_STR: select c1 from t4 where c3 > '2012-01-01';
|
||||
SELECTIVITY = 0.572686
|
||||
SELECTIVITY = 0.333333
|
||||
|
||||
EXPR_STR: select c1 from t4 where c3 = '2016-07-27';
|
||||
SELECTIVITY = 0.01
|
||||
SELECTIVITY = 0.00095
|
||||
|
||||
EXPR_STR: select c1 from t4 where c3 > '1000-01-01';
|
||||
SELECTIVITY = 0.633968
|
||||
SELECTIVITY = 0.333333
|
||||
|
||||
EXPR_STR: select c1 from t4 where c3 < '1000-01-01';
|
||||
SELECTIVITY = 0.01
|
||||
SELECTIVITY = 0.333333
|
||||
|
||||
EXPR_STR: select c1 from t4 where c3 > '9999-12-31';
|
||||
SELECTIVITY = 0.02
|
||||
SELECTIVITY = 0.333333
|
||||
|
||||
EXPR_STR: select c1 from t4 where c3 < '9999-12-31';
|
||||
SELECTIVITY = 0.633968
|
||||
SELECTIVITY = 0.333333
|
||||
|
||||
EXPR_STR: select c1 from t4 where c4 = '12:01:01';
|
||||
SELECTIVITY = 0.01
|
||||
SELECTIVITY = 0.00095
|
||||
|
||||
EXPR_STR: select c1 from t4 where c4 < '838:59:59';
|
||||
SELECTIVITY = 0.633968
|
||||
SELECTIVITY = 0.333333
|
||||
|
||||
EXPR_STR: select c1 from t4 where c4 > '838:59:59';
|
||||
SELECTIVITY = 0.02
|
||||
SELECTIVITY = 0.333333
|
||||
|
||||
EXPR_STR: select c1 from t4 where c4 > '00:00:00';
|
||||
SELECTIVITY = 0.633968
|
||||
SELECTIVITY = 0.333333
|
||||
|
||||
EXPR_STR: select c1 from t4 where c4 < '00:00:00';
|
||||
SELECTIVITY = 0.02
|
||||
SELECTIVITY = 0.333333
|
||||
|
||||
EXPR_STR: select c1 from t4 where c5 = 2016;
|
||||
SELECTIVITY = 0.01
|
||||
SELECTIVITY = 0.00095
|
||||
|
||||
EXPR_STR: select c1 from t4 where c5 > 1970;
|
||||
SELECTIVITY = 0.333333
|
||||
|
@ -22,6 +22,7 @@ select c1 from t4 where c4 > '838:59:59';
|
||||
select c1 from t4 where c4 > '00:00:00';
|
||||
select c1 from t4 where c4 < '00:00:00';
|
||||
select c1 from t4 where c5 = 2016;
|
||||
#year类型query range不做抽取
|
||||
select c1 from t4 where c5 > 1970;
|
||||
select c1 from t4 where c5 < 1970;
|
||||
select c1 from t4 where c5 > 2155;
|
||||
|
@ -524,7 +524,7 @@ the ratio of not null row is (1000-10)/1000 = 0.99
|
||||
EXPECTED RESULT :select 1/500*0.99;
|
||||
----------------------------------------------------------
|
||||
EXPR_STR: select c1 from t1 where c1 between 1000 and 1000;
|
||||
SELECTIVITY = 0.0099
|
||||
SELECTIVITY = 0.99
|
||||
|
||||
******************CASE66******************
|
||||
min = MIN, max = MAX, ndv = 500, null_num = 10
|
||||
@ -564,7 +564,7 @@ the ratio of not null row is (1000-10)/1000 = 0.99
|
||||
EXPECTED RESULT :select 0.2;
|
||||
----------------------------------------------------------
|
||||
EXPR_STR: select c1 from t1 where 1000 between c1 and 1000;
|
||||
SELECTIVITY = 0.1
|
||||
SELECTIVITY = 0.5
|
||||
|
||||
******************CASE71******************
|
||||
min = MIN, max = MAX, ndv = 500, null_num = 10
|
||||
@ -572,7 +572,7 @@ the ratio of not null row is (1000-10)/1000 = 0.99
|
||||
EXPECTED RESULT :select 0.2;
|
||||
----------------------------------------------------------
|
||||
EXPR_STR: select c1 from t1 where 1000 not between c1 and 1000;
|
||||
SELECTIVITY = 0.333333
|
||||
SELECTIVITY = 0.5
|
||||
|
||||
******************CASE72******************
|
||||
min = MIN, max = MAX, ndv = 500, null_num = 10
|
||||
@ -580,7 +580,7 @@ the ratio of not null row is (1000-10)/1000 = 0.99
|
||||
EXPECTED RESULT :select 0;
|
||||
----------------------------------------------------------
|
||||
EXPR_STR: select c1 from t1 where 1000 between 10000 and c1;
|
||||
SELECTIVITY = 0.1
|
||||
SELECTIVITY = 0.5
|
||||
|
||||
******************CASE73******************
|
||||
min = MIN, max = MAX, ndv = 500, null_num = 10
|
||||
@ -588,7 +588,7 @@ the ratio of not null row is (1000-10)/1000 = 0.99
|
||||
EXPECTED RESULT :select 0.2;
|
||||
----------------------------------------------------------
|
||||
EXPR_STR: select c1 from t1 where 2000 between 1000 and c1;
|
||||
SELECTIVITY = 0.1
|
||||
SELECTIVITY = 0.5
|
||||
|
||||
******************CASE74******************
|
||||
min = MIN, max = MAX, ndv = 500, null_num = 10
|
||||
@ -668,7 +668,7 @@ the ratio of not null row is (1000-10)/1000 = 0.99
|
||||
EXPECTED RESULT :select 0.5;
|
||||
----------------------------------------------------------
|
||||
EXPR_STR: select t1.c1 from t1, t2 where t1.c1 != t2.c2;
|
||||
SELECTIVITY = 0.5
|
||||
SELECTIVITY = 0.99
|
||||
|
||||
******************CASE84******************
|
||||
min = MIN, max = MAX, ndv = 500, null_num = 10
|
||||
@ -764,7 +764,7 @@ the ratio of not null row is (1000-10)/1000 = 0.99
|
||||
EXPECTED RESULT :todo. 0.5
|
||||
----------------------------------------------------------
|
||||
EXPR_STR: select c1 from t1 where (c1, c2) != (2000, 10000);
|
||||
SELECTIVITY = 0.5
|
||||
SELECTIVITY = 0.9999
|
||||
|
||||
******************CASE96******************
|
||||
min = MIN, max = MAX, ndv = 500, null_num = 10
|
||||
|
@ -16,6 +16,7 @@ select 0;
|
||||
select c1 from t1 where null;
|
||||
# distinct(1000), min(500), max(10000), nullnum(100)
|
||||
#equal a = 1
|
||||
#等值条件现都视为1/distinct
|
||||
select 1/500*0.99;
|
||||
select c1 from t1 where c1 = 999;
|
||||
select 1/500*0.99;
|
||||
@ -51,6 +52,7 @@ select 1.0/3.0 as not calc
|
||||
select c1 from t1 where c1 + 1 > 5;
|
||||
select 0.2 HALF_OPEN_RANGE_SEL.
|
||||
select c1 from t1 where c1 > 2000;
|
||||
#不考虑=值的影响
|
||||
select 0.2 HALF_OPEN_RANGE_SEL.
|
||||
select c1 from t1 where c1 >= 2000;
|
||||
select 0.2 HALF_OPEN_RANGE_SEL.
|
||||
@ -61,6 +63,7 @@ select 0.2 HALF_OPEN_RANGE_SEL.
|
||||
select c1 from t1 where c1 <= 500;
|
||||
select 0.2 HALF_OPEN_RANGE_SEL.
|
||||
select c1 from t1 where c1 >= 10000;
|
||||
#T_OP_NE 未做处理
|
||||
select 1 - 0.01 - 1/500*0.99
|
||||
select c1 from t1 where c1 != 500;
|
||||
select 1 - 0.01 - 1/500*0.99
|
||||
@ -71,6 +74,8 @@ select 1 - 0.01 - 1/500*0.99
|
||||
select c1 from t1 where c1 * 2 != 50;
|
||||
select 0.5
|
||||
select c1 from t1 where c1 / 2 != 50;
|
||||
# and && or 混合 A and B: A*B, A OR B : A + B - A*B
|
||||
#以上为所需单个条件的选择率
|
||||
select 5 * 1 / 500 * 0.99 (5 * EST_DEF_VAR_EQ_SEL)
|
||||
select c1 from t1 where c1 > 2000 and c1 < 3000;
|
||||
select 0.2 HALF_OPEN_RANGE_SEL.
|
||||
@ -116,6 +121,7 @@ select * from t1 where not (c1 > 2000 and c1 < 3000);
|
||||
select 0.99 - 1/500*0.99*2;
|
||||
select * from t1 where not c1 in (2000, 3000);
|
||||
#T_OP_IN
|
||||
#T_OP_NOT_IN 无法精确计算null_sel,所以这里忽略null_sel.
|
||||
select 1/500*0.99 * 3;
|
||||
select c1 from t1 where c1 in (500, 8000, 10000);
|
||||
select square(1/500*0.99) * 2
|
||||
@ -156,6 +162,7 @@ select 0.2;
|
||||
select c1 from t1 where 1000 between c1 and 1000;
|
||||
select 0.2;
|
||||
select c1 from t1 where 1000 not between c1 and 1000;
|
||||
#btw的最小选择率暂时未设置,这里会直接为0
|
||||
select 0;
|
||||
select c1 from t1 where 1000 between 10000 and c1;
|
||||
select 0.2;
|
||||
|
@ -9,7 +9,7 @@ EXPECTED RESULT :density * num_null = 0.002
|
||||
----------------------------------------------------------
|
||||
|
||||
EXPR_STR: select c1 from t1 where c1 = 10;
|
||||
SELECTIVITY = 0.01
|
||||
SELECTIVITY = 0
|
||||
|
||||
******************CASE1******************
|
||||
min = 1, max = 20, ndv = 20, null_num = 50
|
||||
@ -22,7 +22,7 @@ EXPECTED RESULT :density * num_null = 0.002
|
||||
----------------------------------------------------------
|
||||
|
||||
EXPR_STR: select c1 from t1 where c1 = 5.5;
|
||||
SELECTIVITY = 0.01
|
||||
SELECTIVITY = 0
|
||||
|
||||
******************CASE2******************
|
||||
min = 1, max = 20, ndv = 20, null_num = 50
|
||||
@ -35,7 +35,7 @@ EXPECTED RESULT :density * num_null = 0.002
|
||||
----------------------------------------------------------
|
||||
|
||||
EXPR_STR: select c1 from t1 where c1 > 20;
|
||||
SELECTIVITY = 0.02
|
||||
SELECTIVITY = 0.97
|
||||
|
||||
******************CASE3******************
|
||||
min = 1, max = 20, ndv = 20, null_num = 50
|
||||
@ -48,7 +48,7 @@ EXPECTED RESULT :density * num_null = 0.002
|
||||
----------------------------------------------------------
|
||||
|
||||
EXPR_STR: select c1 from t1 where c1 < 1;
|
||||
SELECTIVITY = 0.02
|
||||
SELECTIVITY = 0.0475
|
||||
|
||||
******************CASE4******************
|
||||
min = 1, max = 20, ndv = 20, null_num = 50
|
||||
@ -61,7 +61,7 @@ EXPECTED RESULT :5/200 * 0.8 = 0.02
|
||||
----------------------------------------------------------
|
||||
|
||||
EXPR_STR: select c1 from t1 where c1 = 1;
|
||||
SELECTIVITY = 0.01
|
||||
SELECTIVITY = 0
|
||||
|
||||
******************CASE5******************
|
||||
min = 1, max = 20, ndv = 20, null_num = 50
|
||||
@ -74,7 +74,7 @@ EXPECTED RESULT :(5/200 + 0.0025) * 0.8 = 0.022
|
||||
----------------------------------------------------------
|
||||
|
||||
EXPR_STR: select c1 from t1 where c1 <= 1;
|
||||
SELECTIVITY = 0.02
|
||||
SELECTIVITY = 0.0475
|
||||
|
||||
******************CASE6******************
|
||||
min = 1, max = 20, ndv = 20, null_num = 50
|
||||
@ -87,7 +87,7 @@ EXPECTED RESULT :(103 - 5) / 200 * 0.8 = 0.392
|
||||
----------------------------------------------------------
|
||||
|
||||
EXPR_STR: select c1 from t1 where c1 >= 2 and c1 <= 10;
|
||||
SELECTIVITY = 0.431053
|
||||
SELECTIVITY = 0.0025
|
||||
|
||||
******************CASE7******************
|
||||
min = 1, max = 20, ndv = 20, null_num = 50
|
||||
@ -100,7 +100,7 @@ EXPECTED RESULT :((103 - 5) / 200) * 0.8 = 0.392
|
||||
----------------------------------------------------------
|
||||
|
||||
EXPR_STR: select c1 from t1 where c1 > 1.5 and c1 <= 10;
|
||||
SELECTIVITY = 0.431053
|
||||
SELECTIVITY = 0.00645
|
||||
|
||||
******************CASE8******************
|
||||
min = 1, max = 20, ndv = 20, null_num = 50
|
||||
@ -113,5 +113,5 @@ EXPECTED RESULT :((103 - 5) / 200 + 0.0025) * 0.8 = 0.393
|
||||
----------------------------------------------------------
|
||||
|
||||
EXPR_STR: select c1 from t1 where c1 >= 2 and c1 < 10.5;
|
||||
SELECTIVITY = 0.473684
|
||||
SELECTIVITY = 0.04085
|
||||
|
||||
|
@ -21,6 +21,7 @@ select c1 from t1 where c1 = 1;
|
||||
select c1 from t1 where c1 <= 1;
|
||||
(103 - 5) / 200 * 0.8 = 0.392
|
||||
select c1 from t1 where c1 >= 2 and c1 <= 10;
|
||||
# TODO: 可能需要改造 query range
|
||||
# ((103 - 5) / 200 + 0.0025) * 0.8 = 0.393
|
||||
((103 - 5) / 200) * 0.8 = 0.392
|
||||
select c1 from t1 where c1 > 1.5 and c1 <= 10;
|
||||
|
@ -14,7 +14,7 @@ for range cond : if half_open min_selectivity = 20/DNV, else min_selectivity = 1
|
||||
EXPECTED RESULT :p_e = 0.1
|
||||
----------------------------------------------------------
|
||||
EXPR_STR: select c1 from t1 where c1 = 1;
|
||||
SELECTIVITY = 0.01
|
||||
SELECTIVITY = 0.1
|
||||
|
||||
******************CASE2******************
|
||||
min = 1, max = 5, ndv = 5, null_num = 5
|
||||
@ -32,7 +32,7 @@ for range cond : if half_open min_selectivity = 20/DNV, else min_selectivity = 1
|
||||
EXPECTED RESULT :p_e + p_e = 0.2
|
||||
----------------------------------------------------------
|
||||
EXPR_STR: select c1 from t1 where c1 = 1 or c1 = 2;
|
||||
SELECTIVITY = 0.02
|
||||
SELECTIVITY = 0.2
|
||||
|
||||
******************CASE4******************
|
||||
min = 1, max = 5, ndv = 5, null_num = 5
|
||||
@ -41,7 +41,7 @@ for range cond : if half_open min_selectivity = 20/DNV, else min_selectivity = 1
|
||||
EXPECTED RESULT :p_e = 0.1
|
||||
----------------------------------------------------------
|
||||
EXPR_STR: select c1 from t1 where c1 = 1;
|
||||
SELECTIVITY = 0.01
|
||||
SELECTIVITY = 0.1
|
||||
|
||||
******************CASE5******************
|
||||
min = 1, max = 5, ndv = 5, null_num = 5
|
||||
@ -50,7 +50,7 @@ for range cond : if half_open min_selectivity = 20/DNV, else min_selectivity = 1
|
||||
EXPECTED RESULT :p_e + p_e - p_e * p_e = 0.19
|
||||
----------------------------------------------------------
|
||||
EXPR_STR: select c1 from t1 where c1 = 1 or c2 = 1;
|
||||
SELECTIVITY = 0.0199
|
||||
SELECTIVITY = 0.19
|
||||
|
||||
******************CASE6******************
|
||||
min = 1, max = 5, ndv = 5, null_num = 5
|
||||
@ -68,7 +68,7 @@ for range cond : if half_open min_selectivity = 20/DNV, else min_selectivity = 1
|
||||
EXPECTED RESULT :p_e * p_e + p_e - p_e * p_e * p_e = 0.109
|
||||
----------------------------------------------------------
|
||||
EXPR_STR: select c1 from t1 where (c1 = 1 and c2 = 1) or c1 = 2;
|
||||
SELECTIVITY = 0.010099
|
||||
SELECTIVITY = 0.109
|
||||
|
||||
******************CASE8******************
|
||||
min = 1, max = 5, ndv = 5, null_num = 5
|
||||
@ -77,7 +77,7 @@ for range cond : if half_open min_selectivity = 20/DNV, else min_selectivity = 1
|
||||
EXPECTED RESULT :p_e ^ 2 + p_e * p_nn - p_e ^ 3 * p_nn = 0.0595
|
||||
----------------------------------------------------------
|
||||
EXPR_STR: select c1 from t1 where (c1 = 1 and c2 = 1) or (c1 = 2 and c2 > 0);
|
||||
SELECTIVITY = 0.010099
|
||||
SELECTIVITY = 0.0595
|
||||
|
||||
******************CASE9******************
|
||||
min = 1, max = 5, ndv = 5, null_num = 5
|
||||
@ -86,7 +86,7 @@ for range cond : if half_open min_selectivity = 20/DNV, else min_selectivity = 1
|
||||
EXPECTED RESULT :(2 * p_e - p_e * p_e) + (p_e * p_nn) - (2 * p_e - p_e * p_e) * (p_e * p_nn) = 0.2305
|
||||
----------------------------------------------------------
|
||||
EXPR_STR: select c1 from t1 where (c1 = 1 or c2 = 1) or (c1 = 2 and c2 > 0);
|
||||
SELECTIVITY = 0.029701
|
||||
SELECTIVITY = 0.2305
|
||||
|
||||
******************CASE10******************
|
||||
min = 1, max = 5, ndv = 5, null_num = 5
|
||||
@ -95,7 +95,7 @@ for range cond : if half_open min_selectivity = 20/DNV, else min_selectivity = 1
|
||||
EXPECTED RESULT :p_e ^ 2 + (p_e + p_nn - p_e * p_nn) - (p_e ^ 2 * (p_e + p_nn - p_e * p_nn)) = 0.5545
|
||||
----------------------------------------------------------
|
||||
EXPR_STR: select c1 from t1 where (c1 = 1 and c2 = 1) or (c1 = 2 or c2 > 0);
|
||||
SELECTIVITY = 1
|
||||
SELECTIVITY = 0.5545
|
||||
|
||||
******************CASE11******************
|
||||
min = 1, max = 5, ndv = 5, null_num = 5
|
||||
@ -104,7 +104,7 @@ for range cond : if half_open min_selectivity = 20/DNV, else min_selectivity = 1
|
||||
EXPECTED RESULT :p_e + p_e + p_e + p_e = 0.4
|
||||
----------------------------------------------------------
|
||||
EXPR_STR: select c1 from t1 where c1 = 1 or c1 = 2 or c1 = 3 or c1 = 4;
|
||||
SELECTIVITY = 0.04
|
||||
SELECTIVITY = 0.4
|
||||
|
||||
******************CASE12******************
|
||||
min = 1, max = 5, ndv = 5, null_num = 5
|
||||
@ -113,7 +113,7 @@ for range cond : if half_open min_selectivity = 20/DNV, else min_selectivity = 1
|
||||
EXPECTED RESULT :(p_e + p_e + p_e) + p_e - p_e * (p_e * 3) = 0.37
|
||||
----------------------------------------------------------
|
||||
EXPR_STR: select c1 from t1 where c1 = 1 or c1 = 2 or c1 = 3 or c2 = 4;
|
||||
SELECTIVITY = 0.0397
|
||||
SELECTIVITY = 0.3439
|
||||
|
||||
******************CASE13******************
|
||||
min = 1, max = 5, ndv = 5, null_num = 5
|
||||
@ -122,5 +122,5 @@ for range cond : if half_open min_selectivity = 20/DNV, else min_selectivity = 1
|
||||
EXPECTED RESULT :((p_e + p_e) + p_e - p_e * (p_e + p_e)) + p_e - p_e * (3 * p_e - p_e * (p_e + p_e)) = 0.352
|
||||
----------------------------------------------------------
|
||||
EXPR_STR: select c1 from t1 where c1 = 1 or c1 = 2 or c2 = 3 or c1 = 4;
|
||||
SELECTIVITY = 0.039502
|
||||
SELECTIVITY = 0.3439
|
||||
|
||||
|
@ -1,3 +1,4 @@
|
||||
# 目前只针对OR有检查独立性的操作,且只针对包含单列的列
|
||||
#define p_nn = (10-5)/10 = 0.5
|
||||
#define p_e = 1/5*0.5 = 0.1
|
||||
p_nn = 0.5
|
||||
@ -10,6 +11,7 @@ select c1 from t1 where c1 > 0;
|
||||
p_e + p_e = 0.2
|
||||
select c1 from t1 where c1 = 1 or c1 = 2;
|
||||
|
||||
# 不受影响
|
||||
p_e = 0.1
|
||||
select c1 from t1 where c1 = 1;
|
||||
p_e + p_e - p_e * p_e = 0.19
|
||||
@ -18,6 +20,7 @@ p_e + p_nn - p_nn * p_e = 0.55
|
||||
select c1 from t1 where c1 > 0 or c1 = 1;
|
||||
|
||||
# complex
|
||||
# 这个还是不太准, 不过符合预期
|
||||
# (p_e + p_e) and (p_e + p_e - p_e * p_e) = 4 * p_e ^ 2 - 2 * p_e ^ 3 = 0.038
|
||||
p_e * p_e + p_e - p_e * p_e * p_e = 0.109
|
||||
select c1 from t1 where (c1 = 1 and c2 = 1) or c1 = 2;
|
||||
|
@ -16,6 +16,7 @@ select 0;
|
||||
select c1 from t1 where null;
|
||||
# distinct(1000), min(500), max(10000), nullnum(100)
|
||||
#equal a = 1
|
||||
#等值条件现都视为1/distinct
|
||||
select 0.7;
|
||||
select c1 from t1 where c1 = 999;
|
||||
select 0.7;
|
||||
@ -51,6 +52,7 @@ select 1.0/3.0 as not calc
|
||||
select c1 from t1 where c1 + 1 > 5;
|
||||
select 0.7;
|
||||
select c1 from t1 where c1 > 2000;
|
||||
#不考虑=值的影响
|
||||
select 0.7;
|
||||
select c1 from t1 where c1 >= 2000;
|
||||
select 0.7;
|
||||
@ -61,6 +63,7 @@ select 0.7;
|
||||
select c1 from t1 where c1 <= 500;
|
||||
select 0.7;
|
||||
select c1 from t1 where c1 >= 10000;
|
||||
#T_OP_NE 未做处理
|
||||
select 0.35
|
||||
select c1 from t1 where c1 != 500;
|
||||
select 0.35
|
||||
@ -71,6 +74,8 @@ select 0.35
|
||||
select c1 from t1 where c1 * 2 != 50;
|
||||
select 0.35
|
||||
select c1 from t1 where c1 / 2 != 50;
|
||||
# and && or 混合 A and B: A*B, A OR B : A + B - A*B
|
||||
#以上为所需单个条件的选择率
|
||||
select 0.7
|
||||
select c1 from t1 where c1 > 2000 and c1 < 3000;
|
||||
select 0.7
|
||||
@ -116,6 +121,7 @@ select * from t1 where not (c1 > 2000 and c1 < 3000);
|
||||
select 0.35;
|
||||
select * from t1 where not c1 in (2000, 3000);
|
||||
#T_OP_IN
|
||||
#T_OP_NOT_IN 无法精确计算null_sel,所以这里忽略null_sel.
|
||||
select 1/500*0.99 * 3;
|
||||
select c1 from t1 where c1 in (500, 8000, 10000);
|
||||
select square(1/500*0.99) * 2
|
||||
@ -156,6 +162,7 @@ select 0.7
|
||||
select c1 from t1 where 1000 between c1 and 1000;
|
||||
select 0.7
|
||||
select c1 from t1 where 1000 not between c1 and 1000;
|
||||
#btw的最小选择率暂时未设置,这里会直接为0
|
||||
select 0
|
||||
select c1 from t1 where 1000 between 10000 and c1;
|
||||
select 0.7
|
||||
|
@ -1,3 +1,5 @@
|
||||
# 有效行数的占比A1 = (10000-1000)/10000, A2 = (5000-1000)/5000
|
||||
# 等值条件选择率B1 = A1*1/1000, B2 = A2*1/1000
|
||||
#table1 B1
|
||||
#table2 B2
|
||||
select * from t1,t2 where t1.c1 = t2.c1;
|
||||
|
@ -1,56 +1,56 @@
|
||||
EXPR_STR: select c1 from t3 where c1 like '|||%';
|
||||
SELECTIVITY = 0.0200001
|
||||
SELECTIVITY = 0.000100072
|
||||
|
||||
EXPR_STR: select c1 from t3 where c1 like '11';
|
||||
SELECTIVITY = 0.01
|
||||
SELECTIVITY = 0.0001
|
||||
|
||||
EXPR_STR: select c1 from t3 where c1 > '|||||||||||||||||||2';
|
||||
SELECTIVITY = 0.02
|
||||
SELECTIVITY = 0.0001
|
||||
|
||||
EXPR_STR: select c1 from t3 where c1 = '11';
|
||||
SELECTIVITY = 0.01
|
||||
SELECTIVITY = 0.0001
|
||||
|
||||
EXPR_STR: select c1 from t3 where c1 != '11';
|
||||
SELECTIVITY = 0.99
|
||||
SELECTIVITY = 0.9999
|
||||
|
||||
EXPR_STR: select c1 from t3 where c1 > '11';
|
||||
SELECTIVITY = 0.996844
|
||||
SELECTIVITY = 0.986844
|
||||
|
||||
EXPR_STR: select c1 from t3 where c1 < '11';
|
||||
SELECTIVITY = 0.0231557
|
||||
SELECTIVITY = 0.0131557
|
||||
|
||||
EXPR_STR: select c1 from t3 where c1 < '|||||||||||||||||||2';
|
||||
SELECTIVITY = 1
|
||||
|
||||
EXPR_STR: select c1 from t3 where c1 > '|||||||||||||||||||2';
|
||||
SELECTIVITY = 0.02
|
||||
SELECTIVITY = 0.0001
|
||||
|
||||
EXPR_STR: select c1 from t3 where c1 > '||||||||||||||||||||';
|
||||
SELECTIVITY = 0.02
|
||||
SELECTIVITY = 0.0001
|
||||
|
||||
EXPR_STR: select c1 from t3 where c1 > '20150305123445555';
|
||||
SELECTIVITY = 0.984024
|
||||
SELECTIVITY = 0.974024
|
||||
|
||||
EXPR_STR: select c1 from t3 where c1 > '20150305123445555';
|
||||
SELECTIVITY = 0.984024
|
||||
SELECTIVITY = 0.974024
|
||||
|
||||
EXPR_STR: select c1 from t3 where c1 like '11';
|
||||
SELECTIVITY = 0.01
|
||||
SELECTIVITY = 0.0001
|
||||
|
||||
EXPR_STR: select c1 from t3 where c1 like 'abc';
|
||||
SELECTIVITY = 0.01
|
||||
SELECTIVITY = 0.0001
|
||||
|
||||
EXPR_STR: select c1 from t3 where c1 like '|||%';
|
||||
SELECTIVITY = 0.0200001
|
||||
SELECTIVITY = 0.000100072
|
||||
|
||||
EXPR_STR: select c1 from t3 where c1 like 123;
|
||||
SELECTIVITY = 0.01
|
||||
SELECTIVITY = 0.333333
|
||||
|
||||
EXPR_STR: select c1 from t3 where c1 like 's%123' escape 's';
|
||||
SELECTIVITY = 0.01
|
||||
SELECTIVITY = 0.0001
|
||||
|
||||
EXPR_STR: select c1 from t3 where c1 like '123';
|
||||
SELECTIVITY = 0.01
|
||||
SELECTIVITY = 0.0001
|
||||
|
||||
EXPR_STR: select c1 from t3 where c1 like '%123';
|
||||
SELECTIVITY = 0.333333
|
||||
@ -65,25 +65,25 @@ EXPR_STR: select c1 from t3 where c1 like '%|||';
|
||||
SELECTIVITY = 0.333333
|
||||
|
||||
EXPR_STR: select c1 from t3 where c1 > '20150305123445555';
|
||||
SELECTIVITY = 0.897209
|
||||
SELECTIVITY = 0.887209
|
||||
|
||||
EXPR_STR: select c1 from t3 where c1 < '20150305123445555';
|
||||
SELECTIVITY = 0.122791
|
||||
SELECTIVITY = 0.112791
|
||||
|
||||
EXPR_STR: select c1 from t3 where c1 < '99991231235959999';
|
||||
SELECTIVITY = 1
|
||||
|
||||
EXPR_STR: select c1 from t3 where c1 > '99991231235959999';
|
||||
SELECTIVITY = 0.02
|
||||
SELECTIVITY = 0.0001
|
||||
|
||||
EXPR_STR: select c1 from t3 where c1 < '10000101000000111';
|
||||
SELECTIVITY = 0.02
|
||||
SELECTIVITY = 0.0001
|
||||
|
||||
EXPR_STR: select c1 from t3 where c1 > '10000101000000111';
|
||||
SELECTIVITY = 1
|
||||
|
||||
EXPR_STR: select c1 from t3 where c1 > '10000101000000111' and c1 < '99991231235959999';
|
||||
SELECTIVITY = 0.99
|
||||
SELECTIVITY = 0.9999
|
||||
|
||||
EXPR_STR: select c1 from t3 where c1 > '20150305123445555' and c1 < '10000101000000111';
|
||||
SELECTIVITY = 0
|
||||
@ -92,29 +92,29 @@ EXPR_STR: select c1 from t3 where c1 < '20150305123445555' and c1 > '99991231235
|
||||
SELECTIVITY = 0
|
||||
|
||||
EXPR_STR: select c1 from t3 where c1 > '20150305123445555' and c1 < '50120805123445666';
|
||||
SELECTIVITY = 0.323038
|
||||
SELECTIVITY = 0.332938
|
||||
|
||||
EXPR_STR: select c1 from t3 where c1 > '20150305123445555' and c1 < '20150305123446666';
|
||||
SELECTIVITY = 0
|
||||
|
||||
EXPR_STR: select c1 from t3 where c1 = '20150305123445555';
|
||||
SELECTIVITY = 0.01
|
||||
SELECTIVITY = 0.0001
|
||||
|
||||
EXPR_STR: select c1 from t3 where c1 != '20150305123445555';
|
||||
SELECTIVITY = 0.99
|
||||
SELECTIVITY = 0.9999
|
||||
|
||||
EXPR_STR: select c1 from t3 where c1 like '20150305123445555';
|
||||
SELECTIVITY = 0.01
|
||||
SELECTIVITY = 0.0001
|
||||
|
||||
EXPR_STR: select c1 from t3 where c1 like '1000%';
|
||||
SELECTIVITY = 0.02
|
||||
SELECTIVITY = 0.000100007
|
||||
|
||||
EXPR_STR: select c1 from t3 where c1 like '9999%';
|
||||
SELECTIVITY = 0.02
|
||||
SELECTIVITY = 0.000100002
|
||||
|
||||
EXPR_STR: select c1 from t3 where c1 like '1%';
|
||||
SELECTIVITY = 0.119323
|
||||
SELECTIVITY = 0.0994233
|
||||
|
||||
EXPR_STR: select c1 from t3 where c1 like '99%';
|
||||
SELECTIVITY = 0.0201236
|
||||
SELECTIVITY = 0.000223633
|
||||
|
||||
|
@ -1,3 +1,4 @@
|
||||
#注意:如果想要测时间格式的字符串,请在datetime这个标志行后面添加,因为两层设的min,max不同。
|
||||
select c1 from t3 where c1 like '|||%';
|
||||
select c1 from t3 where c1 like '11';
|
||||
#range cond
|
||||
@ -9,7 +10,7 @@ select c1 from t3 where c1 < '11';
|
||||
select c1 from t3 where c1 < '|||||||||||||||||||2';
|
||||
select c1 from t3 where c1 > '|||||||||||||||||||2';
|
||||
select c1 from t3 where c1 > '||||||||||||||||||||';
|
||||
|
||||
#用来对比下面测试datetime的结果
|
||||
select c1 from t3 where c1 > '20150305123445555';
|
||||
select c1 from t3 where c1 > '20150305123445555';
|
||||
#like
|
||||
@ -31,7 +32,7 @@ select c1 from t3 where c1 < '99991231235959999';
|
||||
select c1 from t3 where c1 > '99991231235959999';
|
||||
select c1 from t3 where c1 < '10000101000000111';
|
||||
select c1 from t3 where c1 > '10000101000000111';
|
||||
|
||||
#range的计算现在是有问题的。#bug 8551829 :14,15;修复再来修正。
|
||||
select c1 from t3 where c1 > '10000101000000111' and c1 < '99991231235959999';
|
||||
select c1 from t3 where c1 > '20150305123445555' and c1 < '10000101000000111';
|
||||
select c1 from t3 where c1 < '20150305123445555' and c1 > '99991231235959999';
|
||||
|
@ -16,6 +16,7 @@ select 0;
|
||||
select c1 from t1 where null;
|
||||
# distinct(1000), min(500), max(10000), nullnum(100)
|
||||
#equal a = 1
|
||||
#等值条件现都视为1/distinct
|
||||
select 1/500*0.99;
|
||||
select c1 from t1 where c1 = 999;
|
||||
select 1/500*0.99;
|
||||
@ -51,6 +52,7 @@ select 1.0/3.0 as not calc
|
||||
select c1 from t1 where c1 + 1 > 5;
|
||||
select 0;
|
||||
select c1 from t1 where c1 > 2000;
|
||||
#不考虑=值的影响
|
||||
select 0;
|
||||
select c1 from t1 where c1 >= 2000;
|
||||
select 0;
|
||||
@ -61,6 +63,7 @@ select 0;
|
||||
select c1 from t1 where c1 <= 500;
|
||||
select 0;
|
||||
select c1 from t1 where c1 >= 10000;
|
||||
#T_OP_NE 未做处理
|
||||
select 0;
|
||||
select c1 from t1 where c1 != 500;
|
||||
select 0;
|
||||
@ -71,6 +74,8 @@ select 0;
|
||||
select c1 from t1 where c1 * 2 != 50;
|
||||
select 0.5
|
||||
select c1 from t1 where c1 / 2 != 50;
|
||||
# and && or 混合 A and B: A*B, A OR B : A + B - A*B
|
||||
#以上为所需单个条件的选择率
|
||||
select 0
|
||||
select c1 from t1 where c1 > 2000 and c1 < 3000;
|
||||
select 0
|
||||
@ -116,6 +121,7 @@ select * from t1 where not (c1 > 2000 and c1 < 3000);
|
||||
select 0;
|
||||
select * from t1 where not c1 in (2000, 3000);
|
||||
#T_OP_IN
|
||||
#T_OP_NOT_IN 无法精确计算null_sel,所以这里忽略null_sel.
|
||||
select 0;
|
||||
select c1 from t1 where c1 in (500, 8000, 10000);
|
||||
select 0;
|
||||
@ -156,6 +162,7 @@ select 0;
|
||||
select c1 from t1 where 1000 between c1 and 1000;
|
||||
select 0;
|
||||
select c1 from t1 where 1000 not between c1 and 1000;
|
||||
#btw的最小选择率暂时未设置,这里会直接为0
|
||||
select 0;
|
||||
select c1 from t1 where 1000 between 10000 and c1;
|
||||
select 0;
|
||||
|
Reference in New Issue
Block a user