mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Implement avg_frequency unsmoothed jacknife estimator
When sampling data through ANALYZE TABLE, use the estimator to get a better estimation of avg_frequency instead of just using the raw sampled data.
This commit is contained in:
@ -1768,6 +1768,7 @@ set histogram_size=@save_hist_size, histogram_type=@save_hist_type;
|
||||
#
|
||||
set @save_use_stat_tables=@@use_stat_tables;
|
||||
set @save_analyze_sample_percentage=@@analyze_sample_percentage;
|
||||
set @save_hist_size=@@histogram_size;
|
||||
set session rand_seed1=42;
|
||||
set session rand_seed2=62;
|
||||
set use_stat_tables=PREFERABLY;
|
||||
@ -1800,7 +1801,7 @@ select table_name, column_name, min_value, max_value, nulls_ratio, avg_length, a
|
||||
DECODE_HISTOGRAM(hist_type, histogram)
|
||||
from mysql.column_stats;
|
||||
table_name column_name min_value max_value nulls_ratio avg_length avg_frequency DECODE_HISTOGRAM(hist_type, histogram)
|
||||
t1 id 1 17384 0.0000 4.0000 14.0000 0.082,0.086,0.086,0.086,0.086,0.141,0.086,0.086,0.086,0.086,0.086
|
||||
t1 id 1 17384 0.0000 4.0000 14.0000 0.15705,0.15711,0.21463,0.15705,0.15711,0.15706
|
||||
set analyze_sample_percentage=0.1;
|
||||
#
|
||||
# This query will show an innacurate avg_frequency value.
|
||||
@ -1813,7 +1814,7 @@ select table_name, column_name, min_value, max_value, nulls_ratio, avg_length, a
|
||||
DECODE_HISTOGRAM(hist_type, histogram)
|
||||
from mysql.column_stats;
|
||||
table_name column_name min_value max_value nulls_ratio avg_length avg_frequency DECODE_HISTOGRAM(hist_type, histogram)
|
||||
t1 id 111 17026 0.0000 4.0000 1.0047 0.039,0.098,0.055,0.118,0.078,0.157,0.082,0.118,0.094,0.063,0.098
|
||||
t1 id 111 17026 0.0000 4.0000 10.4739 0.13649,0.14922,0.16921,0.21141,0.18355,0.15012
|
||||
#
|
||||
# This query will show a better avg_frequency value.
|
||||
#
|
||||
@ -1826,7 +1827,7 @@ select table_name, column_name, min_value, max_value, nulls_ratio, avg_length, a
|
||||
DECODE_HISTOGRAM(hist_type, histogram)
|
||||
from mysql.column_stats;
|
||||
table_name column_name min_value max_value nulls_ratio avg_length avg_frequency DECODE_HISTOGRAM(hist_type, histogram)
|
||||
t1 id 1 17384 0.0000 4.0000 3.5736 0.082,0.086,0.086,0.082,0.086,0.145,0.086,0.086,0.082,0.086,0.090
|
||||
t1 id 1 17384 0.0000 4.0000 14.0401 0.15566,0.15590,0.15729,0.21538,0.15790,0.15787
|
||||
set analyze_sample_percentage=0;
|
||||
#
|
||||
# Test self adjusting sampling level.
|
||||
@ -1839,7 +1840,7 @@ select table_name, column_name, min_value, max_value, nulls_ratio, avg_length, a
|
||||
DECODE_HISTOGRAM(hist_type, histogram)
|
||||
from mysql.column_stats;
|
||||
table_name column_name min_value max_value nulls_ratio avg_length avg_frequency DECODE_HISTOGRAM(hist_type, histogram)
|
||||
t1 id 1 17384 0.0000 4.0000 7.4523 0.082,0.090,0.086,0.082,0.086,0.145,0.086,0.082,0.086,0.086,0.086
|
||||
t1 id 1 17384 0.0000 4.0000 13.9812 0.15860,0.15767,0.21515,0.15573,0.15630,0.15654
|
||||
#
|
||||
# Test record estimation is working properly.
|
||||
#
|
||||
@ -1858,9 +1859,11 @@ select table_name, column_name, min_value, max_value, nulls_ratio, avg_length, a
|
||||
DECODE_HISTOGRAM(hist_type, histogram)
|
||||
from mysql.column_stats;
|
||||
table_name column_name min_value max_value nulls_ratio avg_length avg_frequency DECODE_HISTOGRAM(hist_type, histogram)
|
||||
t1 id 1 17384 0.0000 4.0000 14.0000 0.082,0.086,0.086,0.086,0.086,0.141,0.086,0.086,0.086,0.086,0.086
|
||||
t1 id 1 17384 0.0000 4.0000 14.0000 0.15705,0.15711,0.21463,0.15705,0.15711,0.15706
|
||||
explain select * from t1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 229376
|
||||
set use_stat_tables=@save_use_stat_tables;
|
||||
drop table t1;
|
||||
set analyze_sample_percentage=@save_analyze_sample_percentage;
|
||||
set histogram_size=@save_hist_size;
|
||||
set use_stat_tables=@save_use_stat_tables;
|
||||
|
Reference in New Issue
Block a user