mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
Changed the type of all double columns in the system statistical tables
mysql.column_stat, mysql.table_stat for the type DECIMAL(12,4). When cached the values from these columns are multiplied by factor 10^5 and stored as ulong numbers now.
This commit is contained in:
parent
f549f495f7
commit
4ff6fd34da
12 changed files with 339 additions and 325 deletions
|
@ -17,34 +17,34 @@ dbt3_s001 region 5
|
|||
dbt3_s001 supplier 10
|
||||
select * from mysql.index_stat;
|
||||
db_name table_name index_name prefix_arity avg_frequency
|
||||
dbt3_s001 customer PRIMARY 1 1
|
||||
dbt3_s001 customer i_c_nationkey 1 6
|
||||
dbt3_s001 lineitem PRIMARY 1 4.003333333333333
|
||||
dbt3_s001 lineitem PRIMARY 2 1
|
||||
dbt3_s001 lineitem i_l_shipdate 1 2.650044130626655
|
||||
dbt3_s001 lineitem i_l_suppkey_partkey 1 30.025
|
||||
dbt3_s001 lineitem i_l_suppkey_partkey 2 8.57857142857143
|
||||
dbt3_s001 lineitem i_l_partkey 1 30.025
|
||||
dbt3_s001 lineitem i_l_suppkey 1 600.5
|
||||
dbt3_s001 lineitem i_l_receiptdate 1 2.6477072310405645
|
||||
dbt3_s001 lineitem i_l_orderkey 1 4.003333333333333
|
||||
dbt3_s001 lineitem i_l_orderkey_quantity 1 4.003333333333333
|
||||
dbt3_s001 lineitem i_l_orderkey_quantity 2 1.0403672903672905
|
||||
dbt3_s001 lineitem i_l_commitdate 1 2.7159656264133876
|
||||
dbt3_s001 nation PRIMARY 1 1
|
||||
dbt3_s001 nation i_n_regionkey 1 5
|
||||
dbt3_s001 orders PRIMARY 1 1
|
||||
dbt3_s001 orders i_o_orderdate 1 1.3321492007104796
|
||||
dbt3_s001 orders i_o_custkey 1 15
|
||||
dbt3_s001 part PRIMARY 1 1
|
||||
dbt3_s001 part i_p_retailprice 1 1
|
||||
dbt3_s001 partsupp PRIMARY 1 3.5
|
||||
dbt3_s001 partsupp PRIMARY 2 1
|
||||
dbt3_s001 partsupp i_ps_partkey 1 3.5
|
||||
dbt3_s001 partsupp i_ps_suppkey 1 70
|
||||
dbt3_s001 region PRIMARY 1 1
|
||||
dbt3_s001 supplier PRIMARY 1 1
|
||||
dbt3_s001 supplier i_s_nationkey 1 1.1111111111111112
|
||||
dbt3_s001 customer PRIMARY 1 1.0000
|
||||
dbt3_s001 customer i_c_nationkey 1 6.0000
|
||||
dbt3_s001 lineitem PRIMARY 1 4.0033
|
||||
dbt3_s001 lineitem PRIMARY 2 1.0000
|
||||
dbt3_s001 lineitem i_l_shipdate 1 2.6500
|
||||
dbt3_s001 lineitem i_l_suppkey_partkey 1 30.0250
|
||||
dbt3_s001 lineitem i_l_suppkey_partkey 2 8.5786
|
||||
dbt3_s001 lineitem i_l_partkey 1 30.0250
|
||||
dbt3_s001 lineitem i_l_suppkey 1 600.5000
|
||||
dbt3_s001 lineitem i_l_receiptdate 1 2.6477
|
||||
dbt3_s001 lineitem i_l_orderkey 1 4.0033
|
||||
dbt3_s001 lineitem i_l_orderkey_quantity 1 4.0033
|
||||
dbt3_s001 lineitem i_l_orderkey_quantity 2 1.0404
|
||||
dbt3_s001 lineitem i_l_commitdate 1 2.7160
|
||||
dbt3_s001 nation PRIMARY 1 1.0000
|
||||
dbt3_s001 nation i_n_regionkey 1 5.0000
|
||||
dbt3_s001 orders PRIMARY 1 1.0000
|
||||
dbt3_s001 orders i_o_orderdate 1 1.3321
|
||||
dbt3_s001 orders i_o_custkey 1 15.0000
|
||||
dbt3_s001 part PRIMARY 1 1.0000
|
||||
dbt3_s001 part i_p_retailprice 1 1.0000
|
||||
dbt3_s001 partsupp PRIMARY 1 3.5000
|
||||
dbt3_s001 partsupp PRIMARY 2 1.0000
|
||||
dbt3_s001 partsupp i_ps_partkey 1 3.5000
|
||||
dbt3_s001 partsupp i_ps_suppkey 1 70.0000
|
||||
dbt3_s001 region PRIMARY 1 1.0000
|
||||
dbt3_s001 supplier PRIMARY 1 1.0000
|
||||
dbt3_s001 supplier i_s_nationkey 1 1.1111
|
||||
set optimizer_switch=@save_optimizer_switch;
|
||||
set @save_optimizer_switch=@@optimizer_switch;
|
||||
set optimizer_switch='index_condition_pushdown=off';
|
||||
|
@ -90,47 +90,47 @@ dbt3_s001 region 5
|
|||
dbt3_s001 supplier 10
|
||||
select * from mysql.index_stat;
|
||||
db_name table_name index_name prefix_arity avg_frequency
|
||||
dbt3_s001 customer PRIMARY 1 1
|
||||
dbt3_s001 customer i_c_nationkey 1 6
|
||||
dbt3_s001 lineitem PRIMARY 1 4.003333333333333
|
||||
dbt3_s001 lineitem PRIMARY 2 1
|
||||
dbt3_s001 lineitem i_l_shipdate 1 2.650044130626655
|
||||
dbt3_s001 lineitem i_l_suppkey_partkey 1 30.025
|
||||
dbt3_s001 lineitem i_l_suppkey_partkey 2 8.57857142857143
|
||||
dbt3_s001 lineitem i_l_partkey 1 30.025
|
||||
dbt3_s001 lineitem i_l_suppkey 1 600.5
|
||||
dbt3_s001 lineitem i_l_receiptdate 1 2.6477072310405645
|
||||
dbt3_s001 lineitem i_l_orderkey 1 4.003333333333333
|
||||
dbt3_s001 lineitem i_l_orderkey_quantity 1 4.003333333333333
|
||||
dbt3_s001 lineitem i_l_orderkey_quantity 2 1.0403672903672905
|
||||
dbt3_s001 lineitem i_l_commitdate 1 2.7159656264133876
|
||||
dbt3_s001 nation PRIMARY 1 1
|
||||
dbt3_s001 nation i_n_regionkey 1 5
|
||||
dbt3_s001 orders PRIMARY 1 1
|
||||
dbt3_s001 orders i_o_orderdate 1 1.3321492007104796
|
||||
dbt3_s001 orders i_o_custkey 1 15
|
||||
dbt3_s001 part PRIMARY 1 1
|
||||
dbt3_s001 part i_p_retailprice 1 1
|
||||
dbt3_s001 partsupp PRIMARY 1 3.5
|
||||
dbt3_s001 partsupp PRIMARY 2 1
|
||||
dbt3_s001 partsupp i_ps_partkey 1 3.5
|
||||
dbt3_s001 partsupp i_ps_suppkey 1 70
|
||||
dbt3_s001 region PRIMARY 1 1
|
||||
dbt3_s001 supplier PRIMARY 1 1
|
||||
dbt3_s001 supplier i_s_nationkey 1 1.1111111111111112
|
||||
dbt3_s001 customer PRIMARY 1 1.0000
|
||||
dbt3_s001 customer i_c_nationkey 1 6.0000
|
||||
dbt3_s001 lineitem PRIMARY 1 4.0033
|
||||
dbt3_s001 lineitem PRIMARY 2 1.0000
|
||||
dbt3_s001 lineitem i_l_shipdate 1 2.6500
|
||||
dbt3_s001 lineitem i_l_suppkey_partkey 1 30.0250
|
||||
dbt3_s001 lineitem i_l_suppkey_partkey 2 8.5786
|
||||
dbt3_s001 lineitem i_l_partkey 1 30.0250
|
||||
dbt3_s001 lineitem i_l_suppkey 1 600.5000
|
||||
dbt3_s001 lineitem i_l_receiptdate 1 2.6477
|
||||
dbt3_s001 lineitem i_l_orderkey 1 4.0033
|
||||
dbt3_s001 lineitem i_l_orderkey_quantity 1 4.0033
|
||||
dbt3_s001 lineitem i_l_orderkey_quantity 2 1.0404
|
||||
dbt3_s001 lineitem i_l_commitdate 1 2.7160
|
||||
dbt3_s001 nation PRIMARY 1 1.0000
|
||||
dbt3_s001 nation i_n_regionkey 1 5.0000
|
||||
dbt3_s001 orders PRIMARY 1 1.0000
|
||||
dbt3_s001 orders i_o_orderdate 1 1.3321
|
||||
dbt3_s001 orders i_o_custkey 1 15.0000
|
||||
dbt3_s001 part PRIMARY 1 1.0000
|
||||
dbt3_s001 part i_p_retailprice 1 1.0000
|
||||
dbt3_s001 partsupp PRIMARY 1 3.5000
|
||||
dbt3_s001 partsupp PRIMARY 2 1.0000
|
||||
dbt3_s001 partsupp i_ps_partkey 1 3.5000
|
||||
dbt3_s001 partsupp i_ps_suppkey 1 70.0000
|
||||
dbt3_s001 region PRIMARY 1 1.0000
|
||||
dbt3_s001 supplier PRIMARY 1 1.0000
|
||||
dbt3_s001 supplier i_s_nationkey 1 1.1111
|
||||
select * from mysql.table_stat where table_name='orders';
|
||||
db_name table_name cardinality
|
||||
dbt3_s001 orders 1500
|
||||
select * from mysql.index_stat where table_name='orders';
|
||||
db_name table_name index_name prefix_arity avg_frequency
|
||||
dbt3_s001 orders PRIMARY 1 1
|
||||
dbt3_s001 orders i_o_orderdate 1 1.3321492007104796
|
||||
dbt3_s001 orders i_o_custkey 1 15
|
||||
dbt3_s001 orders PRIMARY 1 1.0000
|
||||
dbt3_s001 orders i_o_orderdate 1 1.3321
|
||||
dbt3_s001 orders i_o_custkey 1 15.0000
|
||||
select (select cardinality from mysql.table_stat where table_name='orders') /
|
||||
(select avg_frequency from mysql.index_stat
|
||||
where index_name='i_o_orderdate' and prefix_arity=1) as n_distinct;
|
||||
n_distinct
|
||||
1126
|
||||
1126.0416
|
||||
select count(distinct o_orderdate) from orders;
|
||||
count(distinct o_orderdate)
|
||||
1126
|
||||
|
@ -138,20 +138,20 @@ select (select cardinality from mysql.table_stat where table_name='orders') /
|
|||
(select avg_frequency from mysql.index_stat
|
||||
where index_name='i_o_custkey' and prefix_arity=1) as n_distinct;
|
||||
n_distinct
|
||||
100
|
||||
100.0000
|
||||
select count(distinct o_custkey) from orders;
|
||||
count(distinct o_custkey)
|
||||
100
|
||||
show index from orders;
|
||||
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
|
||||
orders 0 PRIMARY 1 o_orderkey A 1500 NULL NULL BTREE
|
||||
orders 1 i_o_orderdate 1 o_orderDATE A 1127 NULL NULL YES BTREE
|
||||
orders 1 i_o_orderdate 1 o_orderDATE A 1126 NULL NULL YES BTREE
|
||||
orders 1 i_o_custkey 1 o_custkey A 100 NULL NULL YES BTREE
|
||||
select index_name, column_name, cardinality from information_schema.statistics
|
||||
where table_name='orders';
|
||||
index_name column_name cardinality
|
||||
PRIMARY o_orderkey 1500
|
||||
i_o_orderdate o_orderDATE 1127
|
||||
i_o_orderdate o_orderDATE 1126
|
||||
i_o_custkey o_custkey 100
|
||||
set @save_optimizer_switch=@@optimizer_switch;
|
||||
set optimizer_switch='index_condition_pushdown=off';
|
||||
|
|
|
@ -20,34 +20,34 @@ dbt3_s001 region 5
|
|||
dbt3_s001 supplier 10
|
||||
select * from mysql.index_stat;
|
||||
db_name table_name index_name prefix_arity avg_frequency
|
||||
dbt3_s001 customer PRIMARY 1 1
|
||||
dbt3_s001 customer i_c_nationkey 1 6
|
||||
dbt3_s001 lineitem PRIMARY 1 4.003333333333333
|
||||
dbt3_s001 lineitem PRIMARY 2 1
|
||||
dbt3_s001 lineitem i_l_shipdate 1 2.650044130626655
|
||||
dbt3_s001 lineitem i_l_suppkey_partkey 1 30.025
|
||||
dbt3_s001 lineitem i_l_suppkey_partkey 2 8.57857142857143
|
||||
dbt3_s001 lineitem i_l_partkey 1 30.025
|
||||
dbt3_s001 lineitem i_l_suppkey 1 600.5
|
||||
dbt3_s001 lineitem i_l_receiptdate 1 2.6477072310405645
|
||||
dbt3_s001 lineitem i_l_orderkey 1 4.003333333333333
|
||||
dbt3_s001 lineitem i_l_orderkey_quantity 1 4.003333333333333
|
||||
dbt3_s001 lineitem i_l_orderkey_quantity 2 1.0403672903672905
|
||||
dbt3_s001 lineitem i_l_commitdate 1 2.7159656264133876
|
||||
dbt3_s001 nation PRIMARY 1 1
|
||||
dbt3_s001 nation i_n_regionkey 1 5
|
||||
dbt3_s001 orders PRIMARY 1 1
|
||||
dbt3_s001 orders i_o_orderdate 1 1.3321492007104796
|
||||
dbt3_s001 orders i_o_custkey 1 15
|
||||
dbt3_s001 part PRIMARY 1 1
|
||||
dbt3_s001 part i_p_retailprice 1 1
|
||||
dbt3_s001 partsupp PRIMARY 1 3.5
|
||||
dbt3_s001 partsupp PRIMARY 2 1
|
||||
dbt3_s001 partsupp i_ps_partkey 1 3.5
|
||||
dbt3_s001 partsupp i_ps_suppkey 1 70
|
||||
dbt3_s001 region PRIMARY 1 1
|
||||
dbt3_s001 supplier PRIMARY 1 1
|
||||
dbt3_s001 supplier i_s_nationkey 1 1.1111111111111112
|
||||
dbt3_s001 customer PRIMARY 1 1.0000
|
||||
dbt3_s001 customer i_c_nationkey 1 6.0000
|
||||
dbt3_s001 lineitem PRIMARY 1 4.0033
|
||||
dbt3_s001 lineitem PRIMARY 2 1.0000
|
||||
dbt3_s001 lineitem i_l_shipdate 1 2.6500
|
||||
dbt3_s001 lineitem i_l_suppkey_partkey 1 30.0250
|
||||
dbt3_s001 lineitem i_l_suppkey_partkey 2 8.5786
|
||||
dbt3_s001 lineitem i_l_partkey 1 30.0250
|
||||
dbt3_s001 lineitem i_l_suppkey 1 600.5000
|
||||
dbt3_s001 lineitem i_l_receiptdate 1 2.6477
|
||||
dbt3_s001 lineitem i_l_orderkey 1 4.0033
|
||||
dbt3_s001 lineitem i_l_orderkey_quantity 1 4.0033
|
||||
dbt3_s001 lineitem i_l_orderkey_quantity 2 1.0404
|
||||
dbt3_s001 lineitem i_l_commitdate 1 2.7160
|
||||
dbt3_s001 nation PRIMARY 1 1.0000
|
||||
dbt3_s001 nation i_n_regionkey 1 5.0000
|
||||
dbt3_s001 orders PRIMARY 1 1.0000
|
||||
dbt3_s001 orders i_o_orderdate 1 1.3321
|
||||
dbt3_s001 orders i_o_custkey 1 15.0000
|
||||
dbt3_s001 part PRIMARY 1 1.0000
|
||||
dbt3_s001 part i_p_retailprice 1 1.0000
|
||||
dbt3_s001 partsupp PRIMARY 1 3.5000
|
||||
dbt3_s001 partsupp PRIMARY 2 1.0000
|
||||
dbt3_s001 partsupp i_ps_partkey 1 3.5000
|
||||
dbt3_s001 partsupp i_ps_suppkey 1 70.0000
|
||||
dbt3_s001 region PRIMARY 1 1.0000
|
||||
dbt3_s001 supplier PRIMARY 1 1.0000
|
||||
dbt3_s001 supplier i_s_nationkey 1 1.1111
|
||||
set optimizer_switch=@save_optimizer_switch;
|
||||
set @save_optimizer_switch=@@optimizer_switch;
|
||||
set optimizer_switch='index_condition_pushdown=off';
|
||||
|
@ -93,71 +93,71 @@ dbt3_s001 region 5
|
|||
dbt3_s001 supplier 10
|
||||
select * from mysql.index_stat;
|
||||
db_name table_name index_name prefix_arity avg_frequency
|
||||
dbt3_s001 customer PRIMARY 1 1
|
||||
dbt3_s001 customer i_c_nationkey 1 6
|
||||
dbt3_s001 customer i_c_nationkey 2 1
|
||||
dbt3_s001 lineitem PRIMARY 1 4.003333333333333
|
||||
dbt3_s001 lineitem PRIMARY 2 1
|
||||
dbt3_s001 lineitem i_l_shipdate 1 2.650044130626655
|
||||
dbt3_s001 lineitem i_l_shipdate 2 1.014872401554842
|
||||
dbt3_s001 lineitem i_l_shipdate 3 1
|
||||
dbt3_s001 lineitem i_l_suppkey_partkey 1 30.025
|
||||
dbt3_s001 lineitem i_l_suppkey_partkey 2 8.57857142857143
|
||||
dbt3_s001 lineitem i_l_suppkey_partkey 3 1.0030065141139135
|
||||
dbt3_s001 lineitem i_l_suppkey_partkey 4 1
|
||||
dbt3_s001 lineitem i_l_partkey 1 30.025
|
||||
dbt3_s001 lineitem i_l_partkey 2 1.008904569892473
|
||||
dbt3_s001 lineitem i_l_partkey 3 1
|
||||
dbt3_s001 lineitem i_l_suppkey 1 600.5
|
||||
dbt3_s001 lineitem i_l_suppkey 2 1.207277844792923
|
||||
dbt3_s001 lineitem i_l_suppkey 3 1
|
||||
dbt3_s001 lineitem i_l_receiptdate 1 2.6477072310405645
|
||||
dbt3_s001 lineitem i_l_receiptdate 2 1.0152155536770922
|
||||
dbt3_s001 lineitem i_l_receiptdate 3 1
|
||||
dbt3_s001 lineitem i_l_orderkey 1 4.003333333333333
|
||||
dbt3_s001 lineitem i_l_orderkey 2 1
|
||||
dbt3_s001 lineitem i_l_orderkey_quantity 1 4.003333333333333
|
||||
dbt3_s001 lineitem i_l_orderkey_quantity 2 1.0403672903672905
|
||||
dbt3_s001 lineitem i_l_orderkey_quantity 3 1
|
||||
dbt3_s001 lineitem i_l_commitdate 1 2.7159656264133876
|
||||
dbt3_s001 lineitem i_l_commitdate 2 1.036416983085951
|
||||
dbt3_s001 lineitem i_l_commitdate 3 1
|
||||
dbt3_s001 nation PRIMARY 1 1
|
||||
dbt3_s001 nation i_n_regionkey 1 5
|
||||
dbt3_s001 nation i_n_regionkey 2 1
|
||||
dbt3_s001 orders PRIMARY 1 1
|
||||
dbt3_s001 orders i_o_orderdate 1 1.3321492007104796
|
||||
dbt3_s001 orders i_o_orderdate 2 1
|
||||
dbt3_s001 orders i_o_custkey 1 15
|
||||
dbt3_s001 orders i_o_custkey 2 1
|
||||
dbt3_s001 part PRIMARY 1 1
|
||||
dbt3_s001 part i_p_retailprice 1 1
|
||||
dbt3_s001 part i_p_retailprice 2 1
|
||||
dbt3_s001 partsupp PRIMARY 1 3.5
|
||||
dbt3_s001 partsupp PRIMARY 2 1
|
||||
dbt3_s001 partsupp i_ps_partkey 1 3.5
|
||||
dbt3_s001 partsupp i_ps_partkey 2 1
|
||||
dbt3_s001 partsupp i_ps_suppkey 1 70
|
||||
dbt3_s001 partsupp i_ps_suppkey 2 1
|
||||
dbt3_s001 region PRIMARY 1 1
|
||||
dbt3_s001 supplier PRIMARY 1 1
|
||||
dbt3_s001 supplier i_s_nationkey 1 1.1111111111111112
|
||||
dbt3_s001 supplier i_s_nationkey 2 1
|
||||
dbt3_s001 customer PRIMARY 1 1.0000
|
||||
dbt3_s001 customer i_c_nationkey 1 6.0000
|
||||
dbt3_s001 customer i_c_nationkey 2 1.0000
|
||||
dbt3_s001 lineitem PRIMARY 1 4.0033
|
||||
dbt3_s001 lineitem PRIMARY 2 1.0000
|
||||
dbt3_s001 lineitem i_l_shipdate 1 2.6500
|
||||
dbt3_s001 lineitem i_l_shipdate 2 1.0149
|
||||
dbt3_s001 lineitem i_l_shipdate 3 1.0000
|
||||
dbt3_s001 lineitem i_l_suppkey_partkey 1 30.0250
|
||||
dbt3_s001 lineitem i_l_suppkey_partkey 2 8.5786
|
||||
dbt3_s001 lineitem i_l_suppkey_partkey 3 1.0030
|
||||
dbt3_s001 lineitem i_l_suppkey_partkey 4 1.0000
|
||||
dbt3_s001 lineitem i_l_partkey 1 30.0250
|
||||
dbt3_s001 lineitem i_l_partkey 2 1.0089
|
||||
dbt3_s001 lineitem i_l_partkey 3 1.0000
|
||||
dbt3_s001 lineitem i_l_suppkey 1 600.5000
|
||||
dbt3_s001 lineitem i_l_suppkey 2 1.2073
|
||||
dbt3_s001 lineitem i_l_suppkey 3 1.0000
|
||||
dbt3_s001 lineitem i_l_receiptdate 1 2.6477
|
||||
dbt3_s001 lineitem i_l_receiptdate 2 1.0152
|
||||
dbt3_s001 lineitem i_l_receiptdate 3 1.0000
|
||||
dbt3_s001 lineitem i_l_orderkey 1 4.0033
|
||||
dbt3_s001 lineitem i_l_orderkey 2 1.0000
|
||||
dbt3_s001 lineitem i_l_orderkey_quantity 1 4.0033
|
||||
dbt3_s001 lineitem i_l_orderkey_quantity 2 1.0404
|
||||
dbt3_s001 lineitem i_l_orderkey_quantity 3 1.0000
|
||||
dbt3_s001 lineitem i_l_commitdate 1 2.7160
|
||||
dbt3_s001 lineitem i_l_commitdate 2 1.0364
|
||||
dbt3_s001 lineitem i_l_commitdate 3 1.0000
|
||||
dbt3_s001 nation PRIMARY 1 1.0000
|
||||
dbt3_s001 nation i_n_regionkey 1 5.0000
|
||||
dbt3_s001 nation i_n_regionkey 2 1.0000
|
||||
dbt3_s001 orders PRIMARY 1 1.0000
|
||||
dbt3_s001 orders i_o_orderdate 1 1.3321
|
||||
dbt3_s001 orders i_o_orderdate 2 1.0000
|
||||
dbt3_s001 orders i_o_custkey 1 15.0000
|
||||
dbt3_s001 orders i_o_custkey 2 1.0000
|
||||
dbt3_s001 part PRIMARY 1 1.0000
|
||||
dbt3_s001 part i_p_retailprice 1 1.0000
|
||||
dbt3_s001 part i_p_retailprice 2 1.0000
|
||||
dbt3_s001 partsupp PRIMARY 1 3.5000
|
||||
dbt3_s001 partsupp PRIMARY 2 1.0000
|
||||
dbt3_s001 partsupp i_ps_partkey 1 3.5000
|
||||
dbt3_s001 partsupp i_ps_partkey 2 1.0000
|
||||
dbt3_s001 partsupp i_ps_suppkey 1 70.0000
|
||||
dbt3_s001 partsupp i_ps_suppkey 2 1.0000
|
||||
dbt3_s001 region PRIMARY 1 1.0000
|
||||
dbt3_s001 supplier PRIMARY 1 1.0000
|
||||
dbt3_s001 supplier i_s_nationkey 1 1.1111
|
||||
dbt3_s001 supplier i_s_nationkey 2 1.0000
|
||||
select * from mysql.table_stat where table_name='orders';
|
||||
db_name table_name cardinality
|
||||
dbt3_s001 orders 1500
|
||||
select * from mysql.index_stat where table_name='orders';
|
||||
db_name table_name index_name prefix_arity avg_frequency
|
||||
dbt3_s001 orders PRIMARY 1 1
|
||||
dbt3_s001 orders i_o_orderdate 1 1.3321492007104796
|
||||
dbt3_s001 orders i_o_orderdate 2 1
|
||||
dbt3_s001 orders i_o_custkey 1 15
|
||||
dbt3_s001 orders i_o_custkey 2 1
|
||||
dbt3_s001 orders PRIMARY 1 1.0000
|
||||
dbt3_s001 orders i_o_orderdate 1 1.3321
|
||||
dbt3_s001 orders i_o_orderdate 2 1.0000
|
||||
dbt3_s001 orders i_o_custkey 1 15.0000
|
||||
dbt3_s001 orders i_o_custkey 2 1.0000
|
||||
select (select cardinality from mysql.table_stat where table_name='orders') /
|
||||
(select avg_frequency from mysql.index_stat
|
||||
where index_name='i_o_orderdate' and prefix_arity=1) as n_distinct;
|
||||
n_distinct
|
||||
1126
|
||||
1126.0416
|
||||
select count(distinct o_orderdate) from orders;
|
||||
count(distinct o_orderdate)
|
||||
1126
|
||||
|
@ -165,20 +165,20 @@ select (select cardinality from mysql.table_stat where table_name='orders') /
|
|||
(select avg_frequency from mysql.index_stat
|
||||
where index_name='i_o_custkey' and prefix_arity=1) as n_distinct;
|
||||
n_distinct
|
||||
100
|
||||
100.0000
|
||||
select count(distinct o_custkey) from orders;
|
||||
count(distinct o_custkey)
|
||||
100
|
||||
show index from orders;
|
||||
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
|
||||
orders 0 PRIMARY 1 o_orderkey A 1500 NULL NULL BTREE
|
||||
orders 1 i_o_orderdate 1 o_orderDATE A 1127 NULL NULL YES BTREE
|
||||
orders 1 i_o_orderdate 1 o_orderDATE A 1126 NULL NULL YES BTREE
|
||||
orders 1 i_o_custkey 1 o_custkey A 100 NULL NULL YES BTREE
|
||||
select index_name, column_name, cardinality from information_schema.statistics
|
||||
where table_name='orders';
|
||||
index_name column_name cardinality
|
||||
PRIMARY o_orderkey 1500
|
||||
i_o_orderdate o_orderDATE 1127
|
||||
i_o_orderdate o_orderDATE 1126
|
||||
i_o_custkey o_custkey 100
|
||||
set @save_optimizer_switch=@@optimizer_switch;
|
||||
set optimizer_switch='index_condition_pushdown=off';
|
||||
|
|
|
@ -1,18 +1,5 @@
|
|||
drop table if exists t1,t2;
|
||||
set @save_use_stat_tables=@@use_stat_tables;
|
||||
CREATE VIEW table_stat AS
|
||||
SELECT * FROM mysql.table_stat;
|
||||
CREATE VIEW column_stat AS
|
||||
SELECT db_name, table_name, column_name,
|
||||
min_value, max_value,
|
||||
CAST(nulls_ratio AS decimal(12,4)) AS 'nulls_ratio',
|
||||
CAST(avg_length AS decimal(12,4)) AS 'avg_length',
|
||||
CAST(avg_frequency AS decimal(12,4)) AS 'avg_frequency'
|
||||
FROM mysql.column_stat;
|
||||
CREATE VIEW index_stat AS
|
||||
SELECT db_name, table_name, index_name, prefix_arity,
|
||||
CAST(avg_frequency AS decimal(12,4)) AS 'avg_frequency'
|
||||
FROM mysql.index_stat;
|
||||
DELETE FROM mysql.table_stat;
|
||||
DELETE FROM mysql.column_stat;
|
||||
DELETE FROM mysql.index_stat;
|
||||
|
@ -73,10 +60,10 @@ INSERT INTO t1 VALUES
|
|||
ANALYZE TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status OK
|
||||
SELECT * FROM table_stat;
|
||||
SELECT * FROM mysql.table_stat;
|
||||
db_name table_name cardinality
|
||||
test t1 40
|
||||
SELECT * FROM column_stat;
|
||||
SELECT * FROM mysql.column_stat;
|
||||
db_name table_name column_name min_value max_value nulls_ratio avg_length avg_frequency
|
||||
test t1 a 0 49 0.0000 4.0000 1.0000
|
||||
test t1 b vvvvvvvvvvvvv zzzzzzzzzzzzzzzzzz 0.2000 17.1250 6.4000
|
||||
|
@ -84,7 +71,7 @@ test t1 c aaaa dddddddd 0.1250 6.6571 7.0000
|
|||
test t1 d 1989-03-12 1999-07-23 0.1500 3.0000 8.5000
|
||||
test t1 e 0.01 0.112 0.2250 8.0000 6.2000
|
||||
test t1 f 1 5 0.2000 1.0000 6.4000
|
||||
SELECT * FROM index_stat;
|
||||
SELECT * FROM mysql.index_stat;
|
||||
db_name table_name index_name prefix_arity avg_frequency
|
||||
test t1 PRIMARY 1 1.0000
|
||||
test t1 idx1 1 6.4000
|
||||
|
@ -98,7 +85,7 @@ test t1 idx4 3 1.1304
|
|||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
40
|
||||
SELECT * FROM column_stat
|
||||
SELECT * FROM mysql.column_stat
|
||||
WHERE db_name='test' AND table_name='t1' AND column_name='a';
|
||||
db_name table_name column_name min_value max_value nulls_ratio avg_length avg_frequency
|
||||
test t1 a 0 49 0.0000 4.0000 1.0000
|
||||
|
@ -110,7 +97,7 @@ SELECT MIN(t1.a), MAX(t1.a),
|
|||
FROM t1;
|
||||
MIN(t1.a) MAX(t1.a) NULLS_RATIO(t1.a) AVG_FREQUENCY(t1.a)
|
||||
0 49 0.2000 1.0000
|
||||
SELECT * FROM column_stat
|
||||
SELECT * FROM mysql.column_stat
|
||||
WHERE db_name='test' AND table_name='t1' AND column_name='b';
|
||||
db_name table_name column_name min_value max_value nulls_ratio avg_length avg_frequency
|
||||
test t1 b vvvvvvvvvvvvv zzzzzzzzzzzzzzzzzz 0.2000 17.1250 6.4000
|
||||
|
@ -122,7 +109,7 @@ SELECT MIN(t1.b), MAX(t1.b),
|
|||
FROM t1;
|
||||
MIN(t1.b) MAX(t1.b) NULLS_RATIO(t1.b) AVG_FREQUENCY(t1.b)
|
||||
vvvvvvvvvvvvv zzzzzzzzzzzzzzzzzz 0.2000 6.4000
|
||||
SELECT * FROM column_stat
|
||||
SELECT * FROM mysql.column_stat
|
||||
WHERE db_name='test' AND table_name='t1' AND column_name='c';
|
||||
db_name table_name column_name min_value max_value nulls_ratio avg_length avg_frequency
|
||||
test t1 c aaaa dddddddd 0.1250 6.6571 7.0000
|
||||
|
@ -134,7 +121,7 @@ SELECT MIN(t1.c), MAX(t1.c),
|
|||
FROM t1;
|
||||
MIN(t1.c) MAX(t1.c) NULLS_RATIO(t1.c) AVG_FREQUENCY(t1.c)
|
||||
aaaa dddddddd 0.1250 7.0000
|
||||
SELECT * FROM column_stat
|
||||
SELECT * FROM mysql.column_stat
|
||||
WHERE db_name='test' AND table_name='t1' AND column_name='d';
|
||||
db_name table_name column_name min_value max_value nulls_ratio avg_length avg_frequency
|
||||
test t1 d 1989-03-12 1999-07-23 0.1500 3.0000 8.5000
|
||||
|
@ -146,7 +133,7 @@ SELECT MIN(t1.d), MAX(t1.d),
|
|||
FROM t1;
|
||||
MIN(t1.d) MAX(t1.d) NULLS_RATIO(t1.d) AVG_FREQUENCY(t1.d)
|
||||
1989-03-12 1999-07-23 0.1500 8.5000
|
||||
SELECT * FROM column_stat
|
||||
SELECT * FROM mysql.column_stat
|
||||
WHERE db_name='test' AND table_name='t1' AND column_name='e';
|
||||
db_name table_name column_name min_value max_value nulls_ratio avg_length avg_frequency
|
||||
test t1 e 0.01 0.112 0.2250 8.0000 6.2000
|
||||
|
@ -158,7 +145,7 @@ SELECT MIN(t1.e), MAX(t1.e),
|
|||
FROM t1;
|
||||
MIN(t1.e) MAX(t1.e) NULLS_RATIO(t1.e) AVG_FREQUENCY(t1.e)
|
||||
0.01 0.112 0.2250 6.2000
|
||||
SELECT * FROM index_stat
|
||||
SELECT * FROM mysql.index_stat
|
||||
WHERE db_name='test' AND table_name='t1' AND index_name='idx1';
|
||||
db_name table_name index_name prefix_arity avg_frequency
|
||||
test t1 idx1 1 6.4000
|
||||
|
@ -173,7 +160,7 @@ WHERE t1.b IS NOT NULL AND t1.e IS NOT NULL)
|
|||
AS 'ARITY 2';
|
||||
ARITY 1 ARITY 2
|
||||
6.4000 1.6875
|
||||
SELECT * FROM index_stat
|
||||
SELECT * FROM mysql.index_stat
|
||||
WHERE db_name='test' AND table_name='t1' AND index_name='idx2';
|
||||
db_name table_name index_name prefix_arity avg_frequency
|
||||
test t1 idx2 1 7.0000
|
||||
|
@ -188,7 +175,7 @@ WHERE t1.c IS NOT NULL AND t1.d IS NOT NULL)
|
|||
AS 'ARITY 2';
|
||||
ARITY 1 ARITY 2
|
||||
7.0000 2.3846
|
||||
SELECT * FROM index_stat
|
||||
SELECT * FROM mysql.index_stat
|
||||
WHERE db_name='test' AND table_name='t1' AND index_name='idx3';
|
||||
db_name table_name index_name prefix_arity avg_frequency
|
||||
test t1 idx3 1 8.5000
|
||||
|
@ -198,7 +185,7 @@ SELECT
|
|||
AS 'ARITY 1';
|
||||
ARITY 1
|
||||
8.5000
|
||||
SELECT * FROM index_stat
|
||||
SELECT * FROM mysql.index_stat
|
||||
WHERE db_name='test' AND table_name='t1' AND index_name='idx4';
|
||||
db_name table_name index_name prefix_arity avg_frequency
|
||||
test t1 idx4 1 6.2000
|
||||
|
@ -225,25 +212,25 @@ DELETE FROM mysql.index_stat;
|
|||
ANALYZE TABLE t1 PERSISTENT FOR COLUMNS() INDEXES();
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Table is already up to date
|
||||
SELECT * FROM table_stat;
|
||||
SELECT * FROM mysql.table_stat;
|
||||
db_name table_name cardinality
|
||||
test t1 40
|
||||
SELECT * FROM column_stat;
|
||||
SELECT * FROM mysql.column_stat;
|
||||
db_name table_name column_name min_value max_value nulls_ratio avg_length avg_frequency
|
||||
SELECT * FROM index_stat;
|
||||
SELECT * FROM mysql.index_stat;
|
||||
db_name table_name index_name prefix_arity avg_frequency
|
||||
ANALYZE TABLE t1 PERSISTENT FOR COLUMNS(c,e,b) INDEXES(idx2,idx4);
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Table is already up to date
|
||||
SELECT * FROM table_stat;
|
||||
SELECT * FROM mysql.table_stat;
|
||||
db_name table_name cardinality
|
||||
test t1 40
|
||||
SELECT * FROM column_stat;
|
||||
SELECT * FROM mysql.column_stat;
|
||||
db_name table_name column_name min_value max_value nulls_ratio avg_length avg_frequency
|
||||
test t1 b vvvvvvvvvvvvv zzzzzzzzzzzzzzzzzz 0.2000 17.1250 6.4000
|
||||
test t1 c aaaa dddddddd 0.1250 6.6571 7.0000
|
||||
test t1 e 0.01 0.112 0.2250 8.0000 6.2000
|
||||
SELECT * FROM index_stat;
|
||||
SELECT * FROM mysql.index_stat;
|
||||
db_name table_name index_name prefix_arity avg_frequency
|
||||
test t1 idx2 1 7.0000
|
||||
test t1 idx2 2 2.3846
|
||||
|
@ -256,10 +243,10 @@ DELETE FROM mysql.index_stat;
|
|||
ANALYZE TABLE t1 PERSISTENT FOR COLUMNS ALL INDEXES ALL;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Table is already up to date
|
||||
SELECT * FROM table_stat;
|
||||
SELECT * FROM mysql.table_stat;
|
||||
db_name table_name cardinality
|
||||
test t1 40
|
||||
SELECT * FROM column_stat;
|
||||
SELECT * FROM mysql.column_stat;
|
||||
db_name table_name column_name min_value max_value nulls_ratio avg_length avg_frequency
|
||||
test t1 a 0 49 0.0000 4.0000 1.0000
|
||||
test t1 b vvvvvvvvvvvvv zzzzzzzzzzzzzzzzzz 0.2000 17.1250 6.4000
|
||||
|
@ -267,7 +254,7 @@ test t1 c aaaa dddddddd 0.1250 6.6571 7.0000
|
|||
test t1 d 1989-03-12 1999-07-23 0.1500 3.0000 8.5000
|
||||
test t1 e 0.01 0.112 0.2250 8.0000 6.2000
|
||||
test t1 f 1 5 0.2000 1.0000 6.4000
|
||||
SELECT * FROM index_stat;
|
||||
SELECT * FROM mysql.index_stat;
|
||||
db_name table_name index_name prefix_arity avg_frequency
|
||||
test t1 PRIMARY 1 1.0000
|
||||
test t1 idx1 1 6.4000
|
||||
|
@ -284,11 +271,11 @@ INSERT INTO t2 SELECT * FROM t1;
|
|||
ANALYZE TABLE t2;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t2 analyze status OK
|
||||
SELECT * FROM table_stat;
|
||||
SELECT * FROM mysql.table_stat;
|
||||
db_name table_name cardinality
|
||||
test t1 40
|
||||
test t2 40
|
||||
SELECT * FROM column_stat ORDER BY column_name;
|
||||
SELECT * FROM mysql.column_stat ORDER BY column_name;
|
||||
db_name table_name column_name min_value max_value nulls_ratio avg_length avg_frequency
|
||||
test t1 a 0 49 0.0000 4.0000 1.0000
|
||||
test t2 a 0 49 0.0000 4.0000 1.0000
|
||||
|
@ -302,7 +289,7 @@ test t1 e 0.01 0.112 0.2250 8.0000 6.2000
|
|||
test t2 e 0.01 0.112 0.2250 8.0000 6.2000
|
||||
test t1 f 1 5 0.2000 1.0000 6.4000
|
||||
test t2 f 1 5 0.2000 1.0000 6.4000
|
||||
SELECT * FROM index_stat ORDER BY index_name, prefix_arity, table_name;
|
||||
SELECT * FROM mysql.index_stat ORDER BY index_name, prefix_arity, table_name;
|
||||
db_name table_name index_name prefix_arity avg_frequency
|
||||
test t1 PRIMARY 1 1.0000
|
||||
test t2 PRIMARY 1 1.0000
|
||||
|
@ -335,7 +322,7 @@ ADD INDEX idx4 (e, b(4), d);
|
|||
ANALYZE TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status OK
|
||||
SELECT * FROM column_stat;
|
||||
SELECT * FROM mysql.column_stat;
|
||||
db_name table_name column_name min_value max_value nulls_ratio avg_length avg_frequency
|
||||
test t1 a 0 49 0.0000 4.0000 1.0000
|
||||
test t1 b NULL NULL 0.2000 17.1250 NULL
|
||||
|
@ -343,7 +330,7 @@ test t1 c aaaa dddddddd 0.1250 6.6571 7.0000
|
|||
test t1 d 1989-03-12 1999-07-23 0.1500 3.0000 8.5000
|
||||
test t1 e 0.01 0.112 0.2250 8.0000 6.2000
|
||||
test t1 f 1 5 0.2000 1.0000 6.4000
|
||||
SELECT * FROM index_stat;
|
||||
SELECT * FROM mysql.index_stat;
|
||||
db_name table_name index_name prefix_arity avg_frequency
|
||||
test t1 PRIMARY 1 1.0000
|
||||
test t1 idx2 1 7.0000
|
||||
|
@ -390,14 +377,14 @@ INDEX (Percentage)
|
|||
set use_stat_tables='preferably';
|
||||
ANALYZE TABLE Country, City, CountryLanguage;
|
||||
SELECT UPPER(db_name), UPPER(table_name), cardinality
|
||||
FROM test.table_stat;
|
||||
FROM mysql.table_stat;
|
||||
UPPER(db_name) UPPER(table_name) cardinality
|
||||
WORLD COUNTRY 239
|
||||
WORLD CITY 4079
|
||||
WORLD COUNTRYLANGUAGE 984
|
||||
SELECT UPPER(db_name), UPPER(table_name),
|
||||
column_name, min_value, max_value, nulls_ratio, avg_length, avg_frequency
|
||||
FROM test.column_stat;
|
||||
FROM mysql.column_stat;
|
||||
UPPER(db_name) UPPER(table_name) column_name min_value max_value nulls_ratio avg_length avg_frequency
|
||||
WORLD COUNTRY Code ABW ZWE 0.0000 3.0000 1.0000
|
||||
WORLD COUNTRY Name Afghanistan Zimbabwe 0.0000 10.1088 1.0000
|
||||
|
@ -413,7 +400,7 @@ WORLD COUNTRYLANGUAGE Language Abhyasi [South]Mande 0.0000 7.1778 2.1532
|
|||
WORLD COUNTRYLANGUAGE Percentage 0.0 99.9 0.0000 4.0000 2.7640
|
||||
SELECT UPPER(db_name), UPPER(table_name),
|
||||
index_name, prefix_arity, avg_frequency
|
||||
FROM test.index_stat;
|
||||
FROM mysql.index_stat;
|
||||
UPPER(db_name) UPPER(table_name) index_name prefix_arity avg_frequency
|
||||
WORLD COUNTRY PRIMARY 1 1.0000
|
||||
WORLD COUNTRY Name 1 1.0000
|
||||
|
@ -458,7 +445,7 @@ ALTER TABLE CountryLanguage ENGINE=InnoDB;
|
|||
set use_stat_tables='preferably';
|
||||
ANALYZE TABLE Country, City, CountryLanguage;
|
||||
SELECT UPPER(db_name), UPPER(table_name), cardinality
|
||||
FROM test.table_stat;
|
||||
FROM mysql.table_stat;
|
||||
UPPER(db_name) UPPER(table_name) cardinality
|
||||
WORLD COUNTRY 239
|
||||
WORLD CITY 4079
|
||||
|
@ -468,7 +455,7 @@ WORLD_INNODB CITY 4079
|
|||
WORLD_INNODB COUNTRYLANGUAGE 984
|
||||
SELECT UPPER(db_name), UPPER(table_name),
|
||||
column_name, min_value, max_value, nulls_ratio, avg_length, avg_frequency
|
||||
FROM test.column_stat;
|
||||
FROM mysql.column_stat;
|
||||
UPPER(db_name) UPPER(table_name) column_name min_value max_value nulls_ratio avg_length avg_frequency
|
||||
WORLD COUNTRY Code ABW ZWE 0.0000 3.0000 1.0000
|
||||
WORLD COUNTRY Name Afghanistan Zimbabwe 0.0000 10.1088 1.0000
|
||||
|
@ -496,7 +483,7 @@ WORLD_INNODB COUNTRYLANGUAGE Language Abhyasi [South]Mande 0.0000 7.1778 2.1532
|
|||
WORLD_INNODB COUNTRYLANGUAGE Percentage 0.0 99.9 0.0000 4.0000 2.7640
|
||||
SELECT UPPER(db_name), UPPER(table_name),
|
||||
index_name, prefix_arity, avg_frequency
|
||||
FROM test.index_stat;
|
||||
FROM mysql.index_stat;
|
||||
UPPER(db_name) UPPER(table_name) index_name prefix_arity avg_frequency
|
||||
WORLD COUNTRY PRIMARY 1 1.0000
|
||||
WORLD COUNTRY Name 1 1.0000
|
||||
|
@ -520,7 +507,4 @@ DROP DATABASE world_innodb;
|
|||
DELETE FROM mysql.table_stat;
|
||||
DELETE FROM mysql.column_stat;
|
||||
DELETE FROM mysql.index_stat;
|
||||
DROP VIEW test.table_stat;
|
||||
DROP VIEW test.column_stat;
|
||||
DROP VIEW test.index_stat;
|
||||
set use_stat_tables=@save_use_stat_tables;
|
||||
|
|
|
@ -283,9 +283,9 @@ column_stat CREATE TABLE `column_stat` (
|
|||
`column_name` varchar(64) COLLATE utf8_bin NOT NULL,
|
||||
`min_value` varchar(255) COLLATE utf8_bin DEFAULT NULL,
|
||||
`max_value` varchar(255) COLLATE utf8_bin DEFAULT NULL,
|
||||
`nulls_ratio` double DEFAULT NULL,
|
||||
`avg_length` double DEFAULT NULL,
|
||||
`avg_frequency` double DEFAULT NULL,
|
||||
`nulls_ratio` decimal(12,4) DEFAULT NULL,
|
||||
`avg_length` decimal(12,4) DEFAULT NULL,
|
||||
`avg_frequency` decimal(12,4) DEFAULT NULL,
|
||||
PRIMARY KEY (`db_name`,`table_name`,`column_name`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Statistics on Columns'
|
||||
show create table index_stat;
|
||||
|
@ -295,7 +295,7 @@ index_stat CREATE TABLE `index_stat` (
|
|||
`table_name` varchar(64) COLLATE utf8_bin NOT NULL,
|
||||
`index_name` varchar(64) COLLATE utf8_bin NOT NULL,
|
||||
`prefix_arity` int(11) unsigned NOT NULL,
|
||||
`avg_frequency` double DEFAULT NULL,
|
||||
`avg_frequency` decimal(12,4) DEFAULT NULL,
|
||||
PRIMARY KEY (`db_name`,`table_name`,`index_name`,`prefix_arity`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Statistics on Indexes'
|
||||
show tables;
|
||||
|
|
|
@ -9,13 +9,13 @@ def mysql columns_priv Host 1 NO char 60 180 NULL NULL NULL utf8 utf8_bin char(
|
|||
def mysql columns_priv Table_name 4 NO char 64 192 NULL NULL NULL utf8 utf8_bin char(64) PRI select,insert,update,references
|
||||
def mysql columns_priv Timestamp 6 CURRENT_TIMESTAMP NO timestamp NULL NULL NULL NULL 0 NULL NULL timestamp on update CURRENT_TIMESTAMP select,insert,update,references
|
||||
def mysql columns_priv User 3 NO char 16 48 NULL NULL NULL utf8 utf8_bin char(16) PRI select,insert,update,references
|
||||
def mysql column_stat avg_frequency 8 NULL YES double NULL NULL 22 NULL NULL NULL NULL double select,insert,update,references
|
||||
def mysql column_stat avg_length 7 NULL YES double NULL NULL 22 NULL NULL NULL NULL double select,insert,update,references
|
||||
def mysql column_stat avg_frequency 8 NULL YES decimal NULL NULL 12 4 NULL NULL NULL decimal(12,4) select,insert,update,references
|
||||
def mysql column_stat avg_length 7 NULL YES decimal NULL NULL 12 4 NULL NULL NULL decimal(12,4) select,insert,update,references
|
||||
def mysql column_stat column_name 3 NULL NO varchar 64 192 NULL NULL NULL utf8 utf8_bin varchar(64) PRI select,insert,update,references
|
||||
def mysql column_stat db_name 1 NULL NO varchar 64 192 NULL NULL NULL utf8 utf8_bin varchar(64) PRI select,insert,update,references
|
||||
def mysql column_stat max_value 5 NULL YES varchar 255 765 NULL NULL NULL utf8 utf8_bin varchar(255) select,insert,update,references
|
||||
def mysql column_stat min_value 4 NULL YES varchar 255 765 NULL NULL NULL utf8 utf8_bin varchar(255) select,insert,update,references
|
||||
def mysql column_stat nulls_ratio 6 NULL YES double NULL NULL 22 NULL NULL NULL NULL double select,insert,update,references
|
||||
def mysql column_stat nulls_ratio 6 NULL YES decimal NULL NULL 12 4 NULL NULL NULL decimal(12,4) select,insert,update,references
|
||||
def mysql column_stat table_name 2 NULL NO varchar 64 192 NULL NULL NULL utf8 utf8_bin varchar(64) PRI select,insert,update,references
|
||||
def mysql db Alter_priv 13 N NO enum 1 3 NULL NULL NULL utf8 utf8_general_ci enum('N','Y') select,insert,update,references
|
||||
def mysql db Alter_routine_priv 19 N NO enum 1 3 NULL NULL NULL utf8 utf8_general_ci enum('N','Y') select,insert,update,references
|
||||
|
@ -105,7 +105,7 @@ def mysql host Select_priv 3 N NO enum 1 3 NULL NULL NULL utf8 utf8_general_ci e
|
|||
def mysql host Show_view_priv 16 N NO enum 1 3 NULL NULL NULL utf8 utf8_general_ci enum('N','Y') select,insert,update,references
|
||||
def mysql host Trigger_priv 20 N NO enum 1 3 NULL NULL NULL utf8 utf8_general_ci enum('N','Y') select,insert,update,references
|
||||
def mysql host Update_priv 5 N NO enum 1 3 NULL NULL NULL utf8 utf8_general_ci enum('N','Y') select,insert,update,references
|
||||
def mysql index_stat avg_frequency 5 NULL YES double NULL NULL 22 NULL NULL NULL NULL double select,insert,update,references
|
||||
def mysql index_stat avg_frequency 5 NULL YES decimal NULL NULL 12 4 NULL NULL NULL decimal(12,4) select,insert,update,references
|
||||
def mysql index_stat db_name 1 NULL NO varchar 64 192 NULL NULL NULL utf8 utf8_bin varchar(64) PRI select,insert,update,references
|
||||
def mysql index_stat index_name 3 NULL NO varchar 64 192 NULL NULL NULL utf8 utf8_bin varchar(64) PRI select,insert,update,references
|
||||
def mysql index_stat prefix_arity 4 NULL NO int NULL NULL 10 0 NULL NULL NULL int(11) unsigned PRI select,insert,update,references
|
||||
|
@ -291,7 +291,7 @@ ORDER BY CHARACTER_SET_NAME, COLLATION_NAME, COL_CML;
|
|||
COL_CML DATA_TYPE CHARACTER_SET_NAME COLLATION_NAME
|
||||
NULL bigint NULL NULL
|
||||
NULL datetime NULL NULL
|
||||
NULL double NULL NULL
|
||||
NULL decimal NULL NULL
|
||||
NULL int NULL NULL
|
||||
NULL smallint NULL NULL
|
||||
NULL time NULL NULL
|
||||
|
@ -325,9 +325,9 @@ NULL mysql columns_priv Timestamp timestamp NULL NULL NULL NULL timestamp
|
|||
3.0000 mysql column_stat column_name varchar 64 192 utf8 utf8_bin varchar(64)
|
||||
3.0000 mysql column_stat min_value varchar 255 765 utf8 utf8_bin varchar(255)
|
||||
3.0000 mysql column_stat max_value varchar 255 765 utf8 utf8_bin varchar(255)
|
||||
NULL mysql column_stat nulls_ratio double NULL NULL NULL NULL double
|
||||
NULL mysql column_stat avg_length double NULL NULL NULL NULL double
|
||||
NULL mysql column_stat avg_frequency double NULL NULL NULL NULL double
|
||||
NULL mysql column_stat nulls_ratio decimal NULL NULL NULL NULL decimal(12,4)
|
||||
NULL mysql column_stat avg_length decimal NULL NULL NULL NULL decimal(12,4)
|
||||
NULL mysql column_stat avg_frequency decimal NULL NULL NULL NULL decimal(12,4)
|
||||
3.0000 mysql db Host char 60 180 utf8 utf8_bin char(60)
|
||||
3.0000 mysql db Db char 64 192 utf8 utf8_bin char(64)
|
||||
3.0000 mysql db User char 16 48 utf8 utf8_bin char(16)
|
||||
|
@ -420,7 +420,7 @@ NULL mysql help_topic help_category_id smallint NULL NULL NULL NULL smallint(5)
|
|||
3.0000 mysql index_stat table_name varchar 64 192 utf8 utf8_bin varchar(64)
|
||||
3.0000 mysql index_stat index_name varchar 64 192 utf8 utf8_bin varchar(64)
|
||||
NULL mysql index_stat prefix_arity int NULL NULL NULL NULL int(11) unsigned
|
||||
NULL mysql index_stat avg_frequency double NULL NULL NULL NULL double
|
||||
NULL mysql index_stat avg_frequency decimal NULL NULL NULL NULL decimal(12,4)
|
||||
NULL mysql ndb_binlog_index Position bigint NULL NULL NULL NULL bigint(20) unsigned
|
||||
1.0000 mysql ndb_binlog_index File varchar 255 255 latin1 latin1_swedish_ci varchar(255)
|
||||
NULL mysql ndb_binlog_index epoch bigint NULL NULL NULL NULL bigint(20) unsigned
|
||||
|
|
|
@ -6,22 +6,6 @@ drop table if exists t1,t2;
|
|||
|
||||
set @save_use_stat_tables=@@use_stat_tables;
|
||||
|
||||
CREATE VIEW table_stat AS
|
||||
SELECT * FROM mysql.table_stat;
|
||||
|
||||
CREATE VIEW column_stat AS
|
||||
SELECT db_name, table_name, column_name,
|
||||
min_value, max_value,
|
||||
CAST(nulls_ratio AS decimal(12,4)) AS 'nulls_ratio',
|
||||
CAST(avg_length AS decimal(12,4)) AS 'avg_length',
|
||||
CAST(avg_frequency AS decimal(12,4)) AS 'avg_frequency'
|
||||
FROM mysql.column_stat;
|
||||
|
||||
CREATE VIEW index_stat AS
|
||||
SELECT db_name, table_name, index_name, prefix_arity,
|
||||
CAST(avg_frequency AS decimal(12,4)) AS 'avg_frequency'
|
||||
FROM mysql.index_stat;
|
||||
|
||||
DELETE FROM mysql.table_stat;
|
||||
DELETE FROM mysql.column_stat;
|
||||
DELETE FROM mysql.index_stat;
|
||||
|
@ -85,13 +69,13 @@ INSERT INTO t1 VALUES
|
|||
|
||||
ANALYZE TABLE t1;
|
||||
|
||||
SELECT * FROM table_stat;
|
||||
SELECT * FROM column_stat;
|
||||
SELECT * FROM index_stat;
|
||||
SELECT * FROM mysql.table_stat;
|
||||
SELECT * FROM mysql.column_stat;
|
||||
SELECT * FROM mysql.index_stat;
|
||||
|
||||
SELECT COUNT(*) FROM t1;
|
||||
|
||||
SELECT * FROM column_stat
|
||||
SELECT * FROM mysql.column_stat
|
||||
WHERE db_name='test' AND table_name='t1' AND column_name='a';
|
||||
SELECT MIN(t1.a), MAX(t1.a),
|
||||
(SELECT COUNT(*) FROM t1 WHERE t1.b IS NULL) /
|
||||
|
@ -100,7 +84,7 @@ SELECT MIN(t1.a), MAX(t1.a),
|
|||
(SELECT COUNT(DISTINCT t1.a) FROM t1) AS "AVG_FREQUENCY(t1.a)"
|
||||
FROM t1;
|
||||
|
||||
SELECT * FROM column_stat
|
||||
SELECT * FROM mysql.column_stat
|
||||
WHERE db_name='test' AND table_name='t1' AND column_name='b';
|
||||
SELECT MIN(t1.b), MAX(t1.b),
|
||||
(SELECT COUNT(*) FROM t1 WHERE t1.b IS NULL) /
|
||||
|
@ -109,7 +93,7 @@ SELECT MIN(t1.b), MAX(t1.b),
|
|||
(SELECT COUNT(DISTINCT t1.b) FROM t1) AS "AVG_FREQUENCY(t1.b)"
|
||||
FROM t1;
|
||||
|
||||
SELECT * FROM column_stat
|
||||
SELECT * FROM mysql.column_stat
|
||||
WHERE db_name='test' AND table_name='t1' AND column_name='c';
|
||||
SELECT MIN(t1.c), MAX(t1.c),
|
||||
(SELECT COUNT(*) FROM t1 WHERE t1.c IS NULL) /
|
||||
|
@ -118,7 +102,7 @@ SELECT MIN(t1.c), MAX(t1.c),
|
|||
(SELECT COUNT(DISTINCT t1.c) FROM t1) AS "AVG_FREQUENCY(t1.c)"
|
||||
FROM t1;
|
||||
|
||||
SELECT * FROM column_stat
|
||||
SELECT * FROM mysql.column_stat
|
||||
WHERE db_name='test' AND table_name='t1' AND column_name='d';
|
||||
SELECT MIN(t1.d), MAX(t1.d),
|
||||
(SELECT COUNT(*) FROM t1 WHERE t1.d IS NULL) /
|
||||
|
@ -127,7 +111,7 @@ SELECT MIN(t1.d), MAX(t1.d),
|
|||
(SELECT COUNT(DISTINCT t1.d) FROM t1) AS "AVG_FREQUENCY(t1.d)"
|
||||
FROM t1;
|
||||
|
||||
SELECT * FROM column_stat
|
||||
SELECT * FROM mysql.column_stat
|
||||
WHERE db_name='test' AND table_name='t1' AND column_name='e';
|
||||
SELECT MIN(t1.e), MAX(t1.e),
|
||||
(SELECT COUNT(*) FROM t1 WHERE t1.e IS NULL) /
|
||||
|
@ -136,7 +120,7 @@ SELECT MIN(t1.e), MAX(t1.e),
|
|||
(SELECT COUNT(DISTINCT t1.e) FROM t1) AS "AVG_FREQUENCY(t1.e)"
|
||||
FROM t1;
|
||||
|
||||
SELECT * FROM index_stat
|
||||
SELECT * FROM mysql.index_stat
|
||||
WHERE db_name='test' AND table_name='t1' AND index_name='idx1';
|
||||
SELECT
|
||||
(SELECT COUNT(*) FROM t1 WHERE t1.b IS NOT NULL) /
|
||||
|
@ -147,7 +131,7 @@ SELECT
|
|||
WHERE t1.b IS NOT NULL AND t1.e IS NOT NULL)
|
||||
AS 'ARITY 2';
|
||||
|
||||
SELECT * FROM index_stat
|
||||
SELECT * FROM mysql.index_stat
|
||||
WHERE db_name='test' AND table_name='t1' AND index_name='idx2';
|
||||
SELECT
|
||||
(SELECT COUNT(*) FROM t1 WHERE t1.c IS NOT NULL) /
|
||||
|
@ -158,14 +142,14 @@ SELECT
|
|||
WHERE t1.c IS NOT NULL AND t1.d IS NOT NULL)
|
||||
AS 'ARITY 2';
|
||||
|
||||
SELECT * FROM index_stat
|
||||
SELECT * FROM mysql.index_stat
|
||||
WHERE db_name='test' AND table_name='t1' AND index_name='idx3';
|
||||
SELECT
|
||||
(SELECT COUNT(*) FROM t1 WHERE t1.d IS NOT NULL) /
|
||||
(SELECT COUNT(DISTINCT t1.d) FROM t1 WHERE t1.d IS NOT NULL)
|
||||
AS 'ARITY 1';
|
||||
|
||||
SELECT * FROM index_stat
|
||||
SELECT * FROM mysql.index_stat
|
||||
WHERE db_name='test' AND table_name='t1' AND index_name='idx4';
|
||||
SELECT
|
||||
(SELECT COUNT(*) FROM t1 WHERE t1.e IS NOT NULL) /
|
||||
|
@ -186,14 +170,14 @@ DELETE FROM mysql.column_stat;
|
|||
DELETE FROM mysql.index_stat;
|
||||
|
||||
ANALYZE TABLE t1 PERSISTENT FOR COLUMNS() INDEXES();
|
||||
SELECT * FROM table_stat;
|
||||
SELECT * FROM column_stat;
|
||||
SELECT * FROM index_stat;
|
||||
SELECT * FROM mysql.table_stat;
|
||||
SELECT * FROM mysql.column_stat;
|
||||
SELECT * FROM mysql.index_stat;
|
||||
|
||||
ANALYZE TABLE t1 PERSISTENT FOR COLUMNS(c,e,b) INDEXES(idx2,idx4);
|
||||
SELECT * FROM table_stat;
|
||||
SELECT * FROM column_stat;
|
||||
SELECT * FROM index_stat;
|
||||
SELECT * FROM mysql.table_stat;
|
||||
SELECT * FROM mysql.column_stat;
|
||||
SELECT * FROM mysql.index_stat;
|
||||
|
||||
DELETE FROM mysql.table_stat;
|
||||
DELETE FROM mysql.column_stat;
|
||||
|
@ -201,9 +185,9 @@ DELETE FROM mysql.index_stat;
|
|||
|
||||
ANALYZE TABLE t1 PERSISTENT FOR COLUMNS ALL INDEXES ALL;
|
||||
|
||||
SELECT * FROM table_stat;
|
||||
SELECT * FROM column_stat;
|
||||
SELECT * FROM index_stat;
|
||||
SELECT * FROM mysql.table_stat;
|
||||
SELECT * FROM mysql.column_stat;
|
||||
SELECT * FROM mysql.index_stat;
|
||||
|
||||
|
||||
CREATE TABLE t2 LIKE t1;
|
||||
|
@ -212,9 +196,9 @@ INSERT INTO t2 SELECT * FROM t1;
|
|||
|
||||
ANALYZE TABLE t2;
|
||||
|
||||
SELECT * FROM table_stat;
|
||||
SELECT * FROM column_stat ORDER BY column_name;
|
||||
SELECT * FROM index_stat ORDER BY index_name, prefix_arity, table_name;
|
||||
SELECT * FROM mysql.table_stat;
|
||||
SELECT * FROM mysql.column_stat ORDER BY column_name;
|
||||
SELECT * FROM mysql.index_stat ORDER BY index_name, prefix_arity, table_name;
|
||||
|
||||
|
||||
DELETE FROM mysql.table_stat;
|
||||
|
@ -231,8 +215,8 @@ ALTER TABLE t1
|
|||
|
||||
ANALYZE TABLE t1;
|
||||
|
||||
SELECT * FROM column_stat;
|
||||
SELECT * FROM index_stat;
|
||||
SELECT * FROM mysql.column_stat;
|
||||
SELECT * FROM mysql.index_stat;
|
||||
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
|
@ -265,13 +249,13 @@ ANALYZE TABLE Country, City, CountryLanguage;
|
|||
--enable_result_log
|
||||
|
||||
SELECT UPPER(db_name), UPPER(table_name), cardinality
|
||||
FROM test.table_stat;
|
||||
FROM mysql.table_stat;
|
||||
SELECT UPPER(db_name), UPPER(table_name),
|
||||
column_name, min_value, max_value, nulls_ratio, avg_length, avg_frequency
|
||||
FROM test.column_stat;
|
||||
FROM mysql.column_stat;
|
||||
SELECT UPPER(db_name), UPPER(table_name),
|
||||
index_name, prefix_arity, avg_frequency
|
||||
FROM test.index_stat;
|
||||
FROM mysql.index_stat;
|
||||
|
||||
use test;
|
||||
|
||||
|
@ -302,13 +286,13 @@ ANALYZE TABLE Country, City, CountryLanguage;
|
|||
--enable_result_log
|
||||
|
||||
SELECT UPPER(db_name), UPPER(table_name), cardinality
|
||||
FROM test.table_stat;
|
||||
FROM mysql.table_stat;
|
||||
SELECT UPPER(db_name), UPPER(table_name),
|
||||
column_name, min_value, max_value, nulls_ratio, avg_length, avg_frequency
|
||||
FROM test.column_stat;
|
||||
FROM mysql.column_stat;
|
||||
SELECT UPPER(db_name), UPPER(table_name),
|
||||
index_name, prefix_arity, avg_frequency
|
||||
FROM test.index_stat;
|
||||
FROM mysql.index_stat;
|
||||
|
||||
use test;
|
||||
|
||||
|
@ -319,10 +303,6 @@ DELETE FROM mysql.table_stat;
|
|||
DELETE FROM mysql.column_stat;
|
||||
DELETE FROM mysql.index_stat;
|
||||
|
||||
DROP VIEW test.table_stat;
|
||||
DROP VIEW test.column_stat;
|
||||
DROP VIEW test.index_stat;
|
||||
|
||||
set use_stat_tables=@save_use_stat_tables;
|
||||
|
||||
|
|
@ -485,6 +485,6 @@ set @had_proxies_priv_table= @@warning_count != 0;
|
|||
|
||||
CREATE TABLE IF NOT EXISTS table_stat (db_name varchar(64) NOT NULL, table_name varchar(64) NOT NULL, cardinality bigint(21) unsigned DEFAULT NULL, PRIMARY KEY (db_name,table_name) ) ENGINE=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Statistics on Tables';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS column_stat (db_name varchar(64) NOT NULL, table_name varchar(64) NOT NULL, column_name varchar(64) NOT NULL, min_value varchar(255) DEFAULT NULL, max_value varchar(255) DEFAULT NULL, nulls_ratio double DEFAULT NULL, avg_length double DEFAULT NULL, avg_frequency double DEFAULT NULL, PRIMARY KEY (db_name,table_name,column_name) ) ENGINE=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Statistics on Columns';
|
||||
CREATE TABLE IF NOT EXISTS column_stat (db_name varchar(64) NOT NULL, table_name varchar(64) NOT NULL, column_name varchar(64) NOT NULL, min_value varchar(255) DEFAULT NULL, max_value varchar(255) DEFAULT NULL, nulls_ratio decimal(12,4) DEFAULT NULL, avg_length decimal(12,4) DEFAULT NULL, avg_frequency decimal(12,4) DEFAULT NULL, PRIMARY KEY (db_name,table_name,column_name) ) ENGINE=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Statistics on Columns';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS index_stat (db_name varchar(64) NOT NULL, table_name varchar(64) NOT NULL, index_name varchar(64) NOT NULL, prefix_arity int(11) unsigned NOT NULL, avg_frequency double DEFAULT NULL, PRIMARY KEY (db_name,table_name,index_name,prefix_arity) ) ENGINE=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Statistics on Indexes';
|
||||
CREATE TABLE IF NOT EXISTS index_stat (db_name varchar(64) NOT NULL, table_name varchar(64) NOT NULL, index_name varchar(64) NOT NULL, prefix_arity int(11) unsigned NOT NULL, avg_frequency decimal(12,4) DEFAULT NULL, PRIMARY KEY (db_name,table_name,index_name,prefix_arity) ) ENGINE=MyISAM CHARACTER SET utf8 COLLATE utf8_bin comment='Statistics on Indexes';
|
||||
|
|
49
sql/field.h
49
sql/field.h
|
@ -219,6 +219,10 @@ public:
|
|||
/* Statistical data on a column */
|
||||
class Column_statistics
|
||||
{
|
||||
private:
|
||||
static const uint Scale_factor_nulls_ratio= 100000;
|
||||
static const uint Scale_factor_avg_length= 100000;
|
||||
static const uint Scale_factor_avg_frequency= 100000;
|
||||
public:
|
||||
/*
|
||||
Bitmap indicating what statistical characteristics
|
||||
|
@ -230,23 +234,54 @@ public:
|
|||
Field *min_value;
|
||||
/* Maximum value for the column */
|
||||
Field *max_value;
|
||||
private:
|
||||
/*
|
||||
The ratio Z/N, where N is the total number of rows,
|
||||
The ratio Z/N multiplied by the scale factor Scale_factor_nulls_ratio,
|
||||
where N is the total number of rows,
|
||||
Z is the number of nulls in the column
|
||||
*/
|
||||
double nulls_ratio;
|
||||
ulong nulls_ratio;
|
||||
/*
|
||||
Average number of bytes occupied by the representation of a
|
||||
value of the column in memory buffers such as join buffer.
|
||||
CHAR values are stripped of trailing spaces.
|
||||
value of the column in memory buffers such as join buffer
|
||||
multiplied by the scale factor Scale_factor_avg_length
|
||||
CHAR values are stripped of trailing spaces
|
||||
Flexible values are stripped of their length prefixes.
|
||||
*/
|
||||
double avg_length;
|
||||
ulong avg_length;
|
||||
/*
|
||||
The ratio N/D, where N is the number of rows with null value
|
||||
The ratio N/D multiplied by the scale factor Scale_factor_avg_frequency,
|
||||
where N is the number of rows with null value
|
||||
in the column, D the number of distinct values among them
|
||||
*/
|
||||
double avg_frequency;
|
||||
ulong avg_frequency;
|
||||
|
||||
public:
|
||||
double get_nulls_ratio()
|
||||
{
|
||||
return (double) nulls_ratio / Scale_factor_nulls_ratio;
|
||||
}
|
||||
double get_avg_length()
|
||||
{
|
||||
return (double) avg_length / Scale_factor_avg_length;
|
||||
}
|
||||
double get_avg_frequency()
|
||||
{
|
||||
return (double) avg_frequency / Scale_factor_avg_frequency;
|
||||
}
|
||||
|
||||
void set_nulls_ratio (double val)
|
||||
{
|
||||
nulls_ratio= (ulong) (val * Scale_factor_nulls_ratio);
|
||||
}
|
||||
void set_avg_length (double val)
|
||||
{
|
||||
avg_length= (ulong) (val * Scale_factor_avg_length);
|
||||
}
|
||||
void set_avg_frequency (double val)
|
||||
{
|
||||
avg_frequency= (ulong) (val * Scale_factor_avg_frequency);
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
@ -14595,8 +14595,8 @@ create_tmp_table(THD *thd, TMP_TABLE_PARAM *param, List<Item> &fields,
|
|||
keyinfo->ext_key_parts= keyinfo->key_parts;
|
||||
keyinfo->key_length=0;
|
||||
keyinfo->rec_per_key=NULL;
|
||||
keyinfo->read_stat.avg_frequency= NULL;
|
||||
keyinfo->write_stat.avg_frequency= NULL;
|
||||
keyinfo->read_stat.init_avg_frequency(NULL);
|
||||
keyinfo->write_stat.init_avg_frequency(NULL);
|
||||
keyinfo->algorithm= HA_KEY_ALG_UNDEF;
|
||||
keyinfo->is_statistics_from_stat_tables= FALSE;
|
||||
keyinfo->name= (char*) "group_key";
|
||||
|
@ -14713,7 +14713,7 @@ create_tmp_table(THD *thd, TMP_TABLE_PARAM *param, List<Item> &fields,
|
|||
keyinfo->algorithm= HA_KEY_ALG_UNDEF;
|
||||
keyinfo->is_statistics_from_stat_tables= FALSE;
|
||||
keyinfo->rec_per_key=0;
|
||||
keyinfo->read_stat.avg_frequency= NULL;
|
||||
keyinfo->read_stat.init_avg_frequency(NULL);
|
||||
|
||||
/*
|
||||
Create an extra field to hold NULL bits so that unique indexes on
|
||||
|
|
|
@ -600,13 +600,13 @@ public:
|
|||
}
|
||||
break;
|
||||
case COLUMN_STAT_NULLS_RATIO:
|
||||
stat_field->store(table_field->write_stat.nulls_ratio);
|
||||
stat_field->store(table_field->write_stat.get_nulls_ratio());
|
||||
break;
|
||||
case COLUMN_STAT_AVG_LENGTH:
|
||||
stat_field->store(table_field->write_stat.avg_length);
|
||||
stat_field->store(table_field->write_stat.get_avg_length());
|
||||
break;
|
||||
case COLUMN_STAT_AVG_FREQUENCY:
|
||||
stat_field->store(table_field->write_stat.avg_frequency);
|
||||
stat_field->store(table_field->write_stat.get_avg_frequency());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -665,13 +665,13 @@ public:
|
|||
&my_charset_utf8_bin);
|
||||
break;
|
||||
case COLUMN_STAT_NULLS_RATIO:
|
||||
table_field->read_stat.nulls_ratio= stat_field->val_real();
|
||||
table_field->read_stat.set_nulls_ratio(stat_field->val_real());
|
||||
break;
|
||||
case COLUMN_STAT_AVG_LENGTH:
|
||||
table_field->read_stat.avg_length= stat_field->val_real();
|
||||
table_field->read_stat.set_avg_length(stat_field->val_real());
|
||||
break;
|
||||
case COLUMN_STAT_AVG_FREQUENCY:
|
||||
table_field->read_stat.avg_frequency= stat_field->val_real();
|
||||
table_field->read_stat.set_avg_frequency(stat_field->val_real());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -766,7 +766,7 @@ public:
|
|||
{
|
||||
Field *stat_field= stat_table->field[INDEX_STAT_AVG_FREQUENCY];
|
||||
double avg_frequency=
|
||||
table_key_info->write_stat.avg_frequency[prefix_arity-1];
|
||||
table_key_info->write_stat.get_avg_frequency(prefix_arity-1);
|
||||
if (avg_frequency == 0)
|
||||
stat_field->set_null();
|
||||
else
|
||||
|
@ -798,9 +798,9 @@ public:
|
|||
{
|
||||
Field *stat_field= stat_table->field[INDEX_STAT_AVG_FREQUENCY];
|
||||
if (!stat_field->is_null())
|
||||
avg_frequency= stat_field->val_real();
|
||||
avg_frequency= stat_field->val_real();
|
||||
}
|
||||
table_key_info->read_stat.avg_frequency[prefix_arity-1]= avg_frequency;
|
||||
table_key_info->read_stat.set_avg_frequency(prefix_arity-1, avg_frequency);
|
||||
}
|
||||
|
||||
};
|
||||
|
@ -1065,9 +1065,9 @@ public:
|
|||
{
|
||||
if (i < prefixes)
|
||||
{
|
||||
index_info->write_stat.avg_frequency[i]=
|
||||
state->prefix_count == 0 ? 0 :
|
||||
(double) state->entry_count / state->prefix_count;
|
||||
double val= state->prefix_count == 0 ?
|
||||
0 : (double) state->entry_count / state->prefix_count;
|
||||
index_info->write_stat.set_avg_frequency(i, val);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1354,17 +1354,19 @@ int collect_statistics_for_table(THD *thd, TABLE *table)
|
|||
|
||||
for (field_ptr= table->field; *field_ptr; field_ptr++)
|
||||
{
|
||||
double val;
|
||||
table_field= *field_ptr;
|
||||
if (!bitmap_is_set(table->read_set, table_field->field_index))
|
||||
continue;
|
||||
table_field->write_stat.nulls_ratio= (double) table_field->nulls/rows;
|
||||
table_field->write_stat.avg_length=
|
||||
(double) table_field->column_total_length / (rows-table_field->nulls);
|
||||
val= (double) table_field->nulls / rows;
|
||||
table_field->write_stat.set_nulls_ratio(val);
|
||||
val= (double) table_field->column_total_length / (rows-table_field->nulls);
|
||||
table_field->write_stat.set_avg_length(val);
|
||||
if (table_field->count_distinct)
|
||||
{
|
||||
table_field->write_stat.avg_frequency=
|
||||
(double) (rows-table_field->nulls) /
|
||||
table_field->count_distinct->get_value();
|
||||
val= (double) (rows-table_field->nulls) /
|
||||
table_field->count_distinct->get_value();
|
||||
table_field->write_stat.set_avg_frequency(val);
|
||||
set_not_null_for_write_column_stat_value(table_field,
|
||||
COLUMN_STAT_AVG_FREQUENCY);
|
||||
delete table_field->count_distinct;
|
||||
|
@ -1585,38 +1587,37 @@ int read_statistics_for_table(THD *thd, TABLE *table)
|
|||
|
||||
key_part_map ext_key_part_map= key_info->ext_key_part_map;
|
||||
if (key_info->key_parts != key_info->ext_key_parts &&
|
||||
key_info->read_stat.avg_frequency[key_info->key_parts] == 0)
|
||||
key_info->read_stat.get_avg_frequency(key_info->key_parts) == 0)
|
||||
{
|
||||
double *ptr;
|
||||
double *ptr_end;
|
||||
KEY *pk_key_info= table->key_info + table->s->primary_key;
|
||||
uint k= key_info->key_parts;
|
||||
uint pk_parts= pk_key_info->key_parts;
|
||||
ha_rows n_rows= table->read_stat.cardinality;
|
||||
double k_dist= n_rows / key_info->read_stat.avg_frequency[k-1];
|
||||
double *k_avg_freq_ptr= key_info->read_stat.avg_frequency + k;
|
||||
double k_dist= n_rows / key_info->read_stat.get_avg_frequency(k-1);
|
||||
uint m= 0;
|
||||
for (uint j= 0; j < pk_parts; j++)
|
||||
{
|
||||
if (!(ext_key_part_map & 1 << j))
|
||||
{
|
||||
for (ptr= k_avg_freq_ptr, ptr_end= ptr + m; ptr < ptr_end; ptr++)
|
||||
for (uint l= k; l < k + m; l++)
|
||||
{
|
||||
double avg_frequency= pk_key_info->read_stat.avg_frequency[j-1];
|
||||
double avg_frequency= pk_key_info->read_stat.get_avg_frequency(j-1);
|
||||
set_if_smaller(avg_frequency, 1);
|
||||
(*ptr)*= pk_key_info->read_stat.avg_frequency[j]/avg_frequency;
|
||||
double val= pk_key_info->read_stat.get_avg_frequency(j) /
|
||||
avg_frequency;
|
||||
key_info->read_stat.set_avg_frequency (l, val);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
key_info->read_stat.avg_frequency[k + m]=
|
||||
pk_key_info->read_stat.avg_frequency[j];
|
||||
m++;
|
||||
double avg_frequency= pk_key_info->read_stat.get_avg_frequency(j);
|
||||
key_info->read_stat.set_avg_frequency(k + m, avg_frequency);
|
||||
m++;
|
||||
}
|
||||
}
|
||||
for (ptr= k_avg_freq_ptr, ptr_end= ptr + m; ptr < ptr_end; ptr++)
|
||||
for (uint l= k; l < k + m; l++)
|
||||
{
|
||||
double avg_frequency= *ptr;
|
||||
double avg_frequency= key_info->read_stat.get_avg_frequency(l);
|
||||
if (avg_frequency == 0 ||
|
||||
table->read_stat.cardinality_is_null)
|
||||
avg_frequency= 1;
|
||||
|
@ -1625,7 +1626,7 @@ int read_statistics_for_table(THD *thd, TABLE *table)
|
|||
avg_frequency/= k_dist;
|
||||
set_if_bigger(avg_frequency, 1);
|
||||
}
|
||||
*ptr= avg_frequency;
|
||||
key_info->read_stat.set_avg_frequency(l, avg_frequency);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1662,7 +1663,8 @@ void set_statistics_for_table(THD *thd, TABLE *table)
|
|||
key_info < key_info_end; key_info++)
|
||||
{
|
||||
key_info->is_statistics_from_stat_tables=
|
||||
(use_stat_table_mode > 1 && key_info->read_stat.avg_frequency &&
|
||||
key_info->read_stat.avg_frequency[0] > 0.5);
|
||||
(use_stat_table_mode > 1 &&
|
||||
key_info->read_stat.avg_frequency_is_set() &&
|
||||
key_info->read_stat.get_avg_frequency(0) > 0.5);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -124,14 +124,28 @@ typedef struct st_key {
|
|||
/* Statistical data on an index prefixes */
|
||||
class Index_statistics
|
||||
{
|
||||
public:
|
||||
private:
|
||||
static const uint Scale_factor_avg_frequency= 100000;
|
||||
/*
|
||||
The k-th element of this array contains the ratio N/D,
|
||||
The k-th element of this array contains the ratio N/D
|
||||
multiplied by the scale factor Scale_factor_avg_frequency,
|
||||
where N is the number of index entries without nulls
|
||||
in the first k components, and D is the number of distinct
|
||||
k-component prefixes among them
|
||||
*/
|
||||
double *avg_frequency;
|
||||
ulong *avg_frequency;
|
||||
|
||||
public:
|
||||
void init_avg_frequency(ulong *ptr) { avg_frequency= ptr; }
|
||||
bool avg_frequency_is_set() { return avg_frequency != NULL; }
|
||||
double get_avg_frequency(uint i)
|
||||
{
|
||||
return (double) avg_frequency[i] / Scale_factor_avg_frequency;
|
||||
}
|
||||
void set_avg_frequency(uint i, double val)
|
||||
{
|
||||
avg_frequency[i]= (ulong) (val * Scale_factor_avg_frequency);
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -159,8 +173,7 @@ typedef struct st_key {
|
|||
if (rec_per_key == 0)
|
||||
return 0;
|
||||
return (is_statistics_from_stat_tables ?
|
||||
(ulong) (100 * read_stat.avg_frequency[i]) / (double) 100 :
|
||||
(double) rec_per_key[i]);
|
||||
read_stat.get_avg_frequency(i) : (double) rec_per_key[i]);
|
||||
}
|
||||
} KEY;
|
||||
|
||||
|
|
22
sql/table.cc
22
sql/table.cc
|
@ -762,8 +762,8 @@ static int open_binary_frm(THD *thd, TABLE_SHARE *share, uchar *head,
|
|||
ulong pos, record_offset;
|
||||
ulong *rec_per_key= NULL;
|
||||
ulong rec_buff_length;
|
||||
double *read_avg_frequency= NULL;
|
||||
double *write_avg_frequency= NULL;
|
||||
ulong *read_avg_frequency= NULL;
|
||||
ulong *write_avg_frequency= NULL;
|
||||
handler *handler_file= 0;
|
||||
KEY *keyinfo;
|
||||
KEY_PART_INFO *key_part= NULL;
|
||||
|
@ -946,13 +946,13 @@ static int open_binary_frm(THD *thd, TABLE_SHARE *share, uchar *head,
|
|||
if (!(rec_per_key= (ulong*) alloc_root(&share->mem_root,
|
||||
sizeof(ulong) * ext_key_parts)))
|
||||
goto err;
|
||||
if (!(read_avg_frequency= (double*) alloc_root(&share->mem_root,
|
||||
sizeof(double) *
|
||||
ext_key_parts)))
|
||||
if (!(read_avg_frequency= (ulong*) alloc_root(&share->mem_root,
|
||||
sizeof(double) *
|
||||
ext_key_parts)))
|
||||
goto err;
|
||||
if (!(write_avg_frequency= (double*) alloc_root(&share->mem_root,
|
||||
sizeof(double) *
|
||||
ext_key_parts)))
|
||||
if (!(write_avg_frequency= (ulong*) alloc_root(&share->mem_root,
|
||||
sizeof(double) *
|
||||
ext_key_parts)))
|
||||
goto err;
|
||||
first_key_part= key_part;
|
||||
first_key_parts= first_keyinfo.key_parts;
|
||||
|
@ -966,8 +966,8 @@ static int open_binary_frm(THD *thd, TABLE_SHARE *share, uchar *head,
|
|||
|
||||
keyinfo->key_part= key_part;
|
||||
keyinfo->rec_per_key= rec_per_key;
|
||||
keyinfo->read_stat.avg_frequency= read_avg_frequency;
|
||||
keyinfo->write_stat.avg_frequency= write_avg_frequency;
|
||||
keyinfo->read_stat.init_avg_frequency(read_avg_frequency);
|
||||
keyinfo->write_stat.init_avg_frequency(write_avg_frequency);
|
||||
for (j=keyinfo->key_parts ; j-- ; key_part++)
|
||||
{
|
||||
*rec_per_key++=0;
|
||||
|
@ -5957,7 +5957,7 @@ bool TABLE::add_tmp_key(uint key, uint key_parts,
|
|||
if (!keyinfo->rec_per_key)
|
||||
return TRUE;
|
||||
bzero(keyinfo->rec_per_key, sizeof(ulong)*key_parts);
|
||||
keyinfo->read_stat.avg_frequency= NULL;
|
||||
keyinfo->read_stat.init_avg_frequency(NULL);
|
||||
|
||||
for (i= 0; i < key_parts; i++)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue