patch 4.0

This commit is contained in:
wangzelin.wzl
2022-10-24 10:34:53 +08:00
parent 4ad6e00ec3
commit 93a1074b0c
10533 changed files with 2588271 additions and 2299373 deletions

View File

@ -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;

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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';

View File

@ -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;