drop table if exists t1,t2;
set @save_use_stat_tables=@@use_stat_tables;
set @save_hist_size=@@histogram_size, @save_hist_type=@@histogram_type;
set histogram_size=0, histogram_type='single_prec_hb';
DELETE FROM mysql.table_stats;
DELETE FROM mysql.column_stats;
DELETE FROM mysql.index_stats;
set use_stat_tables='preferably';
CREATE TABLE t1 (
a int NOT NULL PRIMARY KEY,
b varchar(32),
c char(16),
d date,
e double,
f bit(3),
INDEX idx1 (b, e), 
INDEX idx2 (c, d),
INDEX idx3 (d),
INDEX idx4 (e, b, d)
) ENGINE= MYISAM;
INSERT INTO t1 VALUES
(0, NULL, NULL, NULL, NULL, NULL),
(7, 'xxxxxxxxxxxxxxxxxxxxxxxxxx', 'dddddddd', '1990-05-15', 0.1, b'100'),
(17, 'vvvvvvvvvvvvv', 'aaaa', '1989-03-12', 0.01, b'101'),
(1, 'vvvvvvvvvvvvv', NULL, '1989-03-12', 0.01, b'100'),
(12, 'wwwwwwwwwwwwwwwwwwwwwwwwwwww', 'dddddddd', '1999-07-23', 0.112, b'001'),
(23, 'vvvvvvvvvvvvv', 'dddddddd', '1999-07-23', 0.1, b'100'),
(8, 'vvvvvvvvvvvvv', 'aaaa', '1999-07-23', 0.1, b'100'),
(22, 'xxxxxxxxxxxxxxxxxxxxxxxxxx', 'aaaa', '1989-03-12', 0.112, b'001'),
(31, 'wwwwwwwwwwwwwwwwwwwwwwwwwwww', 'aaaa', '1999-07-23', 0.01, b'001'),
(10, NULL, 'aaaa', NULL, 0.01, b'010'),
(5, 'wwwwwwwwwwwwwwwwwwwwwwwwwwww', 'dddddddd', '1999-07-23', 0.1, b'100'),
(15, 'vvvvvvvvvvvvv', 'ccccccccc', '1990-05-15', 0.1, b'010'),
(30, NULL, 'bbbbbb', NULL, NULL, b'100'),
(38, 'zzzzzzzzzzzzzzzzzz', 'bbbbbb', NULL, NULL, NULL),
(18, 'zzzzzzzzzzzzzzzzzz', 'ccccccccc', '1990-05-15', 0.01, b'010'),
(9, 'yyy', 'bbbbbb', '1998-08-28', 0.01, NULL),
(29, 'vvvvvvvvvvvvv', 'dddddddd', '1999-07-23', 0.012, b'010'),
(3, 'yyy', 'dddddddd',  '1990-05-15', 0.112, b'010'),
(39, 'zzzzzzzzzzzzzzzzzz', 'bbbbbb', NULL, 0.01, b'100'),
(14, 'xxxxxxxxxxxxxxxxxxxxxxxxxx', 'ccccccccc', '1990-05-15', 0.1, b'100'),
(40, 'zzzzzzzzzzzzzzzzzz', 'bbbbbb', '1989-03-12', NULL, NULL),
(44, NULL, 'aaaa', '1989-03-12', NULL, b'010'),
(19, 'vvvvvvvvvvvvv', 'ccccccccc', '1990-05-15', 0.012, b'011'),
(21, 'zzzzzzzzzzzzzzzzzz', 'dddddddd', '1989-03-12', 0.112, b'100'),
(45, NULL, NULL, '1989-03-12', NULL, b'011'),
(2, 'wwwwwwwwwwwwwwwwwwwwwwwwwwww', 'ccccccccc', '1990-05-15', 0.1, b'001'),
(35, 'yyy', 'aaaa', '1990-05-15', 0.05, b'011'),
(4, 'vvvvvvvvvvvvv', 'dddddddd', '1999-07-23', 0.01, b'101'),
(47, NULL, 'aaaa', '1990-05-15', 0.05, b'010'),
(42, NULL, 'ccccccccc', '1989-03-12', 0.01, b'010'),
(32, NULL, 'bbbbbb', '1990-05-15', 0.01, b'011'),
(49, 'wwwwwwwwwwwwwwwwwwwwwwwwwwww' , 'aaaa', '1990-05-15', NULL, NULL),
(43, 'wwwwwwwwwwwwwwwwwwwwwwwwwwww' , 'bbbbbb', '1990-05-15', NULL, b'100'),
(37, 'yyy', NULL, '1989-03-12', 0.05, b'011'),
(41, 'xxxxxxxxxxxxxxxxxxxxxxxxxx', 'ccccccccc', '1990-05-15', 0.05, NULL),
(34, 'yyy', NULL, NULL, NULL, NULL),
(33, 'zzzzzzzzzzzzzzzzzz', 'dddddddd', '1989-03-12', 0.05, b'011'),
(24,  'wwwwwwwwwwwwwwwwwwwwwwwwwwww', 'dddddddd', '1990-05-15', 0.01,  b'101'),
(11, 'yyy', 'ccccccccc', '1999-07-23', 0.1, NULL),
(25, 'zzzzzzzzzzzzzzzzzz', 'bbb', '1989-03-12', 0.01,  b'101');
ANALYZE TABLE t1;
Table	Op	Msg_type	Msg_text
test.t1	analyze	status	Engine-independent statistics collected
test.t1	analyze	status	OK
SELECT * FROM mysql.table_stats;
db_name	table_name	cardinality
test	t1	40
SELECT * FROM mysql.column_stats;
db_name	table_name	column_name	min_value	max_value	nulls_ratio	avg_length	avg_frequency	hist_size	hist_type	histogram
test	t1	a	0	49	0.0000	4.0000	1.0000	0	NULL	NULL
test	t1	b	vvvvvvvvvvvvv	zzzzzzzzzzzzzzzzzz	0.2000	17.1250	6.4000	0	NULL	NULL
test	t1	c	aaaa	dddddddd	0.1250	6.6571	7.0000	0	NULL	NULL
test	t1	d	1989-03-12	1999-07-23	0.1500	3.0000	8.5000	0	NULL	NULL
test	t1	e	0.01	0.112	0.2250	8.0000	6.2000	0	NULL	NULL
test	t1	f	1	5	0.2000	1.0000	6.4000	0	NULL	NULL
SELECT * FROM mysql.index_stats;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	t1	PRIMARY	1	1.0000
test	t1	idx1	1	6.4000
test	t1	idx1	2	1.6875
test	t1	idx2	1	7.0000
test	t1	idx2	2	2.3846
test	t1	idx3	1	8.5000
test	t1	idx4	1	6.2000
test	t1	idx4	2	1.6875
test	t1	idx4	3	1.1304
SELECT COUNT(*) FROM t1;
COUNT(*)
40
SELECT * FROM mysql.column_stats
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	hist_size	hist_type	histogram
test	t1	a	0	49	0.0000	4.0000	1.0000	0	NULL	NULL
SELECT MIN(t1.a), MAX(t1.a), 
(SELECT COUNT(*) FROM t1 WHERE t1.b IS NULL) /
(SELECT COUNT(*) FROM t1) AS "NULLS_RATIO(t1.a)",
(SELECT COUNT(t1.a) FROM t1) /
(SELECT COUNT(DISTINCT t1.a) FROM t1) AS "AVG_FREQUENCY(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 mysql.column_stats
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	hist_size	hist_type	histogram
test	t1	b	vvvvvvvvvvvvv	zzzzzzzzzzzzzzzzzz	0.2000	17.1250	6.4000	0	NULL	NULL
SELECT MIN(t1.b), MAX(t1.b), 
(SELECT COUNT(*) FROM t1 WHERE t1.b IS NULL) /
(SELECT COUNT(*) FROM t1) AS "NULLS_RATIO(t1.b)",
(SELECT COUNT(t1.b) FROM t1) /
(SELECT COUNT(DISTINCT t1.b) FROM t1) AS "AVG_FREQUENCY(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 mysql.column_stats 
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	hist_size	hist_type	histogram
test	t1	c	aaaa	dddddddd	0.1250	6.6571	7.0000	0	NULL	NULL
SELECT MIN(t1.c), MAX(t1.c), 
(SELECT COUNT(*) FROM t1 WHERE t1.c IS NULL) /
(SELECT COUNT(*) FROM t1) AS "NULLS_RATIO(t1.c)",
(SELECT COUNT(t1.c) FROM t1) /
(SELECT COUNT(DISTINCT t1.c) FROM t1) AS "AVG_FREQUENCY(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 mysql.column_stats
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	hist_size	hist_type	histogram
test	t1	d	1989-03-12	1999-07-23	0.1500	3.0000	8.5000	0	NULL	NULL
SELECT MIN(t1.d), MAX(t1.d), 
(SELECT COUNT(*) FROM t1 WHERE t1.d IS NULL) /
(SELECT COUNT(*) FROM t1) AS "NULLS_RATIO(t1.d)",
(SELECT COUNT(t1.d) FROM t1) /
(SELECT COUNT(DISTINCT t1.d) FROM t1) AS "AVG_FREQUENCY(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 mysql.column_stats
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	hist_size	hist_type	histogram
test	t1	e	0.01	0.112	0.2250	8.0000	6.2000	0	NULL	NULL
SELECT MIN(t1.e), MAX(t1.e), 
(SELECT COUNT(*) FROM t1 WHERE t1.e IS NULL) /
(SELECT COUNT(*) FROM t1) AS "NULLS_RATIO(t1.e)",
(SELECT COUNT(t1.e) FROM t1) /
(SELECT COUNT(DISTINCT t1.e) FROM t1) AS "AVG_FREQUENCY(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 mysql.index_stats
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
test	t1	idx1	2	1.6875
SELECT 
(SELECT COUNT(*) FROM t1 WHERE t1.b IS NOT NULL) /
(SELECT COUNT(DISTINCT t1.b) FROM t1 WHERE t1.b IS NOT NULL)
AS 'ARITY 1',
(SELECT COUNT(*) FROM t1 WHERE t1.b IS NOT NULL AND t1.e IS NOT NULL) /
(SELECT COUNT(DISTINCT t1.b, t1.e) FROM t1
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 mysql.index_stats
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
test	t1	idx2	2	2.3846
SELECT 
(SELECT COUNT(*) FROM t1 WHERE t1.c IS NOT NULL) /
(SELECT COUNT(DISTINCT t1.c) FROM t1 WHERE t1.c IS NOT NULL) 
AS 'ARITY 1',
(SELECT COUNT(*) FROM t1 WHERE t1.c IS NOT NULL AND t1.d IS NOT NULL) /
(SELECT COUNT(DISTINCT t1.c, t1.d) FROM t1
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 mysql.index_stats
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
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';
ARITY 1
8.5000
SELECT * FROM mysql.index_stats
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
test	t1	idx4	2	1.6875
test	t1	idx4	3	1.1304
SELECT 
(SELECT COUNT(*) FROM t1 WHERE t1.e IS NOT NULL) /
(SELECT COUNT(DISTINCT t1.e) FROM t1 WHERE t1.e IS NOT NULL)
AS 'ARITY 1',
(SELECT COUNT(*) FROM t1 WHERE t1.e IS NOT NULL AND t1.b IS NOT NULL) /
(SELECT COUNT(DISTINCT t1.e, t1.b) FROM t1
WHERE t1.e IS NOT NULL AND t1.b IS NOT NULL)
AS 'ARITY 2',
(SELECT COUNT(*) FROM t1
WHERE t1.e IS NOT NULL AND t1.b IS NOT NULL AND t1.d IS NOT NULL) /  
(SELECT COUNT(DISTINCT t1.e, t1.b, t1.d) FROM t1
WHERE t1.e IS NOT NULL AND t1.b IS NOT NULL AND t1.d IS NOT NULL)
AS 'ARITY 3';
ARITY 1	ARITY 2	ARITY 3
6.2000	1.6875	1.1304
DELETE FROM mysql.column_stats;
set histogram_size=4;
ANALYZE TABLE t1;
Table	Op	Msg_type	Msg_text
test.t1	analyze	status	Engine-independent statistics collected
test.t1	analyze	status	Table is already up to date
SELECT db_name, table_name, column_name,
min_value, max_value,
nulls_ratio, avg_frequency,
hist_size, hist_type, HEX(histogram)
FROM mysql.column_stats;
db_name	table_name	column_name	min_value	max_value	nulls_ratio	avg_frequency	hist_size	hist_type	HEX(histogram)
test	t1	a	0	49	0.0000	1.0000	4	SINGLE_PREC_HB	2E62A1D0
test	t1	b	vvvvvvvvvvvvv	zzzzzzzzzzzzzzzzzz	0.2000	6.4000	4	SINGLE_PREC_HB	003FBFFF
test	t1	c	aaaa	dddddddd	0.1250	7.0000	4	SINGLE_PREC_HB	0055AAFF
test	t1	d	1989-03-12	1999-07-23	0.1500	8.5000	4	SINGLE_PREC_HB	001919FF
test	t1	e	0.01	0.112	0.2250	6.2000	4	SINGLE_PREC_HB	000564E1
test	t1	f	1	5	0.2000	6.4000	4	SINGLE_PREC_HB	3F7FBFBF
DELETE FROM mysql.column_stats;
set histogram_size=8;
set histogram_type='DOUBLE_PREC_HB';
ANALYZE TABLE t1;
Table	Op	Msg_type	Msg_text
test.t1	analyze	status	Engine-independent statistics collected
test.t1	analyze	status	Table is already up to date
SELECT db_name, table_name, column_name,
min_value, max_value,
nulls_ratio, avg_frequency,
hist_size, hist_type, HEX(histogram)
FROM mysql.column_stats;
db_name	table_name	column_name	min_value	max_value	nulls_ratio	avg_frequency	hist_size	hist_type	HEX(histogram)
test	t1	a	0	49	0.0000	1.0000	8	DOUBLE_PREC_HB	052F4363F4A1F9D0
test	t1	b	vvvvvvvvvvvvv	zzzzzzzzzzzzzzzzzz	0.2000	6.4000	8	DOUBLE_PREC_HB	0000FF3FFFBFFFFF
test	t1	c	aaaa	dddddddd	0.1250	7.0000	8	DOUBLE_PREC_HB	00005555AAAAFFFF
test	t1	d	1989-03-12	1999-07-23	0.1500	8.5000	8	DOUBLE_PREC_HB	0000031A031AFFFF
test	t1	e	0.01	0.112	0.2250	6.2000	8	DOUBLE_PREC_HB	000005056464E1E1
test	t1	f	1	5	0.2000	6.4000	8	DOUBLE_PREC_HB	FF3FFF7FFFBFFFBF
DELETE FROM mysql.column_stats;
set histogram_size= 0;
set histogram_type='single_prec_hb';
ANALYZE TABLE t1;
Table	Op	Msg_type	Msg_text
test.t1	analyze	status	Engine-independent statistics collected
test.t1	analyze	status	Table is already up to date
CREATE TABLE t3 (
a int NOT NULL PRIMARY KEY,
b varchar(32),
c char(16),
INDEX idx (c)
) ENGINE=MYISAM;
INSERT INTO t3 VALUES
(0, NULL, NULL),
(7, 'xxxxxxxxxxxxxxxxxxxxxxxxxx', 'dddddddd'),
(17, 'vvvvvvvvvvvvv', 'aaaa'),
(1, 'vvvvvvvvvvvvv', NULL),
(12, 'wwwwwwwwwwwwwwwwwwwwwwwwwwww', 'dddddddd'),
(23, 'vvvvvvvvvvvvv', 'dddddddd'),
(8, 'vvvvvvvvvvvvv', 'aaaa'),
(22, 'xxxxxxxxxxxxxxxxxxxxxxxxxx', 'aaaa'),
(31, 'wwwwwwwwwwwwwwwwwwwwwwwwwwww', 'aaaa'),
(10, NULL, 'aaaa'),
(5, 'wwwwwwwwwwwwwwwwwwwwwwwwwwww', 'dddddddd'),
(15, 'vvvvvvvvvvvvv', 'ccccccccc'),
(30, NULL, 'bbbbbb'),
(38, 'zzzzzzzzzzzzzzzzzz', 'bbbbbb'),
(18, 'zzzzzzzzzzzzzzzzzz', 'ccccccccc'),
(9, 'yyy', 'bbbbbb'),
(29, 'vvvvvvvvvvvvv', 'dddddddd');
ANALYZE TABLE t3;
Table	Op	Msg_type	Msg_text
test.t3	analyze	status	Engine-independent statistics collected
test.t3	analyze	status	OK
SELECT * FROM mysql.table_stats;
db_name	table_name	cardinality
test	t1	40
test	t3	17
SELECT * FROM mysql.column_stats;
db_name	table_name	column_name	min_value	max_value	nulls_ratio	avg_length	avg_frequency	hist_size	hist_type	histogram
test	t1	a	0	49	0.0000	4.0000	1.0000	0	NULL	NULL
test	t1	b	vvvvvvvvvvvvv	zzzzzzzzzzzzzzzzzz	0.2000	17.1250	6.4000	0	NULL	NULL
test	t1	c	aaaa	dddddddd	0.1250	6.6571	7.0000	0	NULL	NULL
test	t1	d	1989-03-12	1999-07-23	0.1500	3.0000	8.5000	0	NULL	NULL
test	t1	e	0.01	0.112	0.2250	8.0000	6.2000	0	NULL	NULL
test	t1	f	1	5	0.2000	1.0000	6.4000	0	NULL	NULL
test	t3	a	0	38	0.0000	4.0000	1.0000	0	NULL	NULL
test	t3	b	vvvvvvvvvvvvv	zzzzzzzzzzzzzzzzzz	0.1765	18.0714	2.8000	0	NULL	NULL
test	t3	c	aaaa	dddddddd	0.1176	6.4000	3.7500	0	NULL	NULL
SELECT * FROM mysql.index_stats;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	t1	PRIMARY	1	1.0000
test	t1	idx1	1	6.4000
test	t1	idx1	2	1.6875
test	t1	idx2	1	7.0000
test	t1	idx2	2	2.3846
test	t1	idx3	1	8.5000
test	t1	idx4	1	6.2000
test	t1	idx4	2	1.6875
test	t1	idx4	3	1.1304
test	t3	PRIMARY	1	1.0000
test	t3	idx	1	3.7500
ALTER TABLE t1 RENAME TO s1;
SELECT * FROM mysql.table_stats;
db_name	table_name	cardinality
test	s1	40
test	t3	17
SELECT * FROM mysql.column_stats;
db_name	table_name	column_name	min_value	max_value	nulls_ratio	avg_length	avg_frequency	hist_size	hist_type	histogram
test	s1	a	0	49	0.0000	4.0000	1.0000	0	NULL	NULL
test	s1	b	vvvvvvvvvvvvv	zzzzzzzzzzzzzzzzzz	0.2000	17.1250	6.4000	0	NULL	NULL
test	s1	c	aaaa	dddddddd	0.1250	6.6571	7.0000	0	NULL	NULL
test	s1	d	1989-03-12	1999-07-23	0.1500	3.0000	8.5000	0	NULL	NULL
test	s1	e	0.01	0.112	0.2250	8.0000	6.2000	0	NULL	NULL
test	s1	f	1	5	0.2000	1.0000	6.4000	0	NULL	NULL
test	t3	a	0	38	0.0000	4.0000	1.0000	0	NULL	NULL
test	t3	b	vvvvvvvvvvvvv	zzzzzzzzzzzzzzzzzz	0.1765	18.0714	2.8000	0	NULL	NULL
test	t3	c	aaaa	dddddddd	0.1176	6.4000	3.7500	0	NULL	NULL
SELECT * FROM mysql.index_stats;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	s1	PRIMARY	1	1.0000
test	s1	idx1	1	6.4000
test	s1	idx1	2	1.6875
test	s1	idx2	1	7.0000
test	s1	idx2	2	2.3846
test	s1	idx3	1	8.5000
test	s1	idx4	1	6.2000
test	s1	idx4	2	1.6875
test	s1	idx4	3	1.1304
test	t3	PRIMARY	1	1.0000
test	t3	idx	1	3.7500
RENAME TABLE s1 TO t1;
SELECT * FROM mysql.table_stats;
db_name	table_name	cardinality
test	t1	40
test	t3	17
SELECT * FROM mysql.column_stats;
db_name	table_name	column_name	min_value	max_value	nulls_ratio	avg_length	avg_frequency	hist_size	hist_type	histogram
test	t1	a	0	49	0.0000	4.0000	1.0000	0	NULL	NULL
test	t1	b	vvvvvvvvvvvvv	zzzzzzzzzzzzzzzzzz	0.2000	17.1250	6.4000	0	NULL	NULL
test	t1	c	aaaa	dddddddd	0.1250	6.6571	7.0000	0	NULL	NULL
test	t1	d	1989-03-12	1999-07-23	0.1500	3.0000	8.5000	0	NULL	NULL
test	t1	e	0.01	0.112	0.2250	8.0000	6.2000	0	NULL	NULL
test	t1	f	1	5	0.2000	1.0000	6.4000	0	NULL	NULL
test	t3	a	0	38	0.0000	4.0000	1.0000	0	NULL	NULL
test	t3	b	vvvvvvvvvvvvv	zzzzzzzzzzzzzzzzzz	0.1765	18.0714	2.8000	0	NULL	NULL
test	t3	c	aaaa	dddddddd	0.1176	6.4000	3.7500	0	NULL	NULL
SELECT * FROM mysql.index_stats;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	t1	PRIMARY	1	1.0000
test	t1	idx1	1	6.4000
test	t1	idx1	2	1.6875
test	t1	idx2	1	7.0000
test	t1	idx2	2	2.3846
test	t1	idx3	1	8.5000
test	t1	idx4	1	6.2000
test	t1	idx4	2	1.6875
test	t1	idx4	3	1.1304
test	t3	PRIMARY	1	1.0000
test	t3	idx	1	3.7500
DROP TABLE t3;
SELECT * FROM mysql.table_stats;
db_name	table_name	cardinality
test	t1	40
SELECT * FROM mysql.column_stats;
db_name	table_name	column_name	min_value	max_value	nulls_ratio	avg_length	avg_frequency	hist_size	hist_type	histogram
test	t1	a	0	49	0.0000	4.0000	1.0000	0	NULL	NULL
test	t1	b	vvvvvvvvvvvvv	zzzzzzzzzzzzzzzzzz	0.2000	17.1250	6.4000	0	NULL	NULL
test	t1	c	aaaa	dddddddd	0.1250	6.6571	7.0000	0	NULL	NULL
test	t1	d	1989-03-12	1999-07-23	0.1500	3.0000	8.5000	0	NULL	NULL
test	t1	e	0.01	0.112	0.2250	8.0000	6.2000	0	NULL	NULL
test	t1	f	1	5	0.2000	1.0000	6.4000	0	NULL	NULL
SELECT * FROM mysql.index_stats;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	t1	PRIMARY	1	1.0000
test	t1	idx1	1	6.4000
test	t1	idx1	2	1.6875
test	t1	idx2	1	7.0000
test	t1	idx2	2	2.3846
test	t1	idx3	1	8.5000
test	t1	idx4	1	6.2000
test	t1	idx4	2	1.6875
test	t1	idx4	3	1.1304
CREATE TEMPORARY TABLE t0 (
a int NOT NULL PRIMARY KEY,
b varchar(32)
);
INSERT INTO t0 SELECT a,b FROM t1;
ALTER TABLE t1 CHANGE COLUMN b x varchar(32), 
CHANGE COLUMN e y double;
SHOW CREATE TABLE t1;
Table	Create Table
t1	CREATE TABLE `t1` (
  `a` int(11) NOT NULL,
  `x` varchar(32) DEFAULT NULL,
  `c` char(16) DEFAULT NULL,
  `d` date DEFAULT NULL,
  `y` double DEFAULT NULL,
  `f` bit(3) DEFAULT NULL,
  PRIMARY KEY (`a`),
  KEY `idx1` (`x`,`y`),
  KEY `idx2` (`c`,`d`),
  KEY `idx3` (`d`),
  KEY `idx4` (`y`,`x`,`d`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
SELECT * FROM mysql.column_stats;
db_name	table_name	column_name	min_value	max_value	nulls_ratio	avg_length	avg_frequency	hist_size	hist_type	histogram
test	t1	a	0	49	0.0000	4.0000	1.0000	0	NULL	NULL
test	t1	c	aaaa	dddddddd	0.1250	6.6571	7.0000	0	NULL	NULL
test	t1	d	1989-03-12	1999-07-23	0.1500	3.0000	8.5000	0	NULL	NULL
test	t1	f	1	5	0.2000	1.0000	6.4000	0	NULL	NULL
test	t1	x	vvvvvvvvvvvvv	zzzzzzzzzzzzzzzzzz	0.2000	17.1250	6.4000	0	NULL	NULL
test	t1	y	0.01	0.112	0.2250	8.0000	6.2000	0	NULL	NULL
ALTER TABLE t1 CHANGE COLUMN x b varchar(32), 
CHANGE COLUMN y e double;
SHOW CREATE TABLE t1;
Table	Create Table
t1	CREATE TABLE `t1` (
  `a` int(11) NOT NULL,
  `b` varchar(32) DEFAULT NULL,
  `c` char(16) DEFAULT NULL,
  `d` date DEFAULT NULL,
  `e` double DEFAULT NULL,
  `f` bit(3) DEFAULT NULL,
  PRIMARY KEY (`a`),
  KEY `idx1` (`b`,`e`),
  KEY `idx2` (`c`,`d`),
  KEY `idx3` (`d`),
  KEY `idx4` (`e`,`b`,`d`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
SELECT * FROM mysql.column_stats;
db_name	table_name	column_name	min_value	max_value	nulls_ratio	avg_length	avg_frequency	hist_size	hist_type	histogram
test	t1	a	0	49	0.0000	4.0000	1.0000	0	NULL	NULL
test	t1	b	vvvvvvvvvvvvv	zzzzzzzzzzzzzzzzzz	0.2000	17.1250	6.4000	0	NULL	NULL
test	t1	c	aaaa	dddddddd	0.1250	6.6571	7.0000	0	NULL	NULL
test	t1	d	1989-03-12	1999-07-23	0.1500	3.0000	8.5000	0	NULL	NULL
test	t1	e	0.01	0.112	0.2250	8.0000	6.2000	0	NULL	NULL
test	t1	f	1	5	0.2000	1.0000	6.4000	0	NULL	NULL
ALTER TABLE t1 RENAME TO s1, CHANGE COLUMN b x varchar(32);
SHOW CREATE TABLE s1;
Table	Create Table
s1	CREATE TABLE `s1` (
  `a` int(11) NOT NULL,
  `x` varchar(32) DEFAULT NULL,
  `c` char(16) DEFAULT NULL,
  `d` date DEFAULT NULL,
  `e` double DEFAULT NULL,
  `f` bit(3) DEFAULT NULL,
  PRIMARY KEY (`a`),
  KEY `idx1` (`x`,`e`),
  KEY `idx2` (`c`,`d`),
  KEY `idx3` (`d`),
  KEY `idx4` (`e`,`x`,`d`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
SELECT * FROM mysql.table_stats;
db_name	table_name	cardinality
test	s1	40
SELECT * FROM mysql.column_stats;
db_name	table_name	column_name	min_value	max_value	nulls_ratio	avg_length	avg_frequency	hist_size	hist_type	histogram
test	s1	a	0	49	0.0000	4.0000	1.0000	0	NULL	NULL
test	s1	c	aaaa	dddddddd	0.1250	6.6571	7.0000	0	NULL	NULL
test	s1	d	1989-03-12	1999-07-23	0.1500	3.0000	8.5000	0	NULL	NULL
test	s1	e	0.01	0.112	0.2250	8.0000	6.2000	0	NULL	NULL
test	s1	f	1	5	0.2000	1.0000	6.4000	0	NULL	NULL
test	s1	x	vvvvvvvvvvvvv	zzzzzzzzzzzzzzzzzz	0.2000	17.1250	6.4000	0	NULL	NULL
SELECT * FROM mysql.index_stats;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	s1	PRIMARY	1	1.0000
test	s1	idx1	1	6.4000
test	s1	idx1	2	1.6875
test	s1	idx2	1	7.0000
test	s1	idx2	2	2.3846
test	s1	idx3	1	8.5000
test	s1	idx4	1	6.2000
test	s1	idx4	2	1.6875
test	s1	idx4	3	1.1304
ALTER TABLE s1 RENAME TO t1, CHANGE COLUMN x b varchar(32);
SHOW CREATE TABLE t1;
Table	Create Table
t1	CREATE TABLE `t1` (
  `a` int(11) NOT NULL,
  `b` varchar(32) DEFAULT NULL,
  `c` char(16) DEFAULT NULL,
  `d` date DEFAULT NULL,
  `e` double DEFAULT NULL,
  `f` bit(3) DEFAULT NULL,
  PRIMARY KEY (`a`),
  KEY `idx1` (`b`,`e`),
  KEY `idx2` (`c`,`d`),
  KEY `idx3` (`d`),
  KEY `idx4` (`e`,`b`,`d`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
SELECT * FROM mysql.table_stats;
db_name	table_name	cardinality
test	t1	40
SELECT * FROM mysql.column_stats;
db_name	table_name	column_name	min_value	max_value	nulls_ratio	avg_length	avg_frequency	hist_size	hist_type	histogram
test	t1	a	0	49	0.0000	4.0000	1.0000	0	NULL	NULL
test	t1	b	vvvvvvvvvvvvv	zzzzzzzzzzzzzzzzzz	0.2000	17.1250	6.4000	0	NULL	NULL
test	t1	c	aaaa	dddddddd	0.1250	6.6571	7.0000	0	NULL	NULL
test	t1	d	1989-03-12	1999-07-23	0.1500	3.0000	8.5000	0	NULL	NULL
test	t1	e	0.01	0.112	0.2250	8.0000	6.2000	0	NULL	NULL
test	t1	f	1	5	0.2000	1.0000	6.4000	0	NULL	NULL
SELECT * FROM mysql.index_stats;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	t1	PRIMARY	1	1.0000
test	t1	idx1	1	6.4000
test	t1	idx1	2	1.6875
test	t1	idx2	1	7.0000
test	t1	idx2	2	2.3846
test	t1	idx3	1	8.5000
test	t1	idx4	1	6.2000
test	t1	idx4	2	1.6875
test	t1	idx4	3	1.1304
ALTER TABLE t1 CHANGE COLUMN b x varchar(30);
SHOW CREATE TABLE t1;
Table	Create Table
t1	CREATE TABLE `t1` (
  `a` int(11) NOT NULL,
  `x` varchar(30) DEFAULT NULL,
  `c` char(16) DEFAULT NULL,
  `d` date DEFAULT NULL,
  `e` double DEFAULT NULL,
  `f` bit(3) DEFAULT NULL,
  PRIMARY KEY (`a`),
  KEY `idx1` (`x`,`e`),
  KEY `idx2` (`c`,`d`),
  KEY `idx3` (`d`),
  KEY `idx4` (`e`,`x`,`d`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
SELECT * FROM mysql.column_stats;
db_name	table_name	column_name	min_value	max_value	nulls_ratio	avg_length	avg_frequency	hist_size	hist_type	histogram
test	t1	a	0	49	0.0000	4.0000	1.0000	0	NULL	NULL
test	t1	c	aaaa	dddddddd	0.1250	6.6571	7.0000	0	NULL	NULL
test	t1	d	1989-03-12	1999-07-23	0.1500	3.0000	8.5000	0	NULL	NULL
test	t1	e	0.01	0.112	0.2250	8.0000	6.2000	0	NULL	NULL
test	t1	f	1	5	0.2000	1.0000	6.4000	0	NULL	NULL
SELECT * FROM mysql.index_stats;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	t1	PRIMARY	1	1.0000
test	t1	idx2	1	7.0000
test	t1	idx2	2	2.3846
test	t1	idx3	1	8.5000
ALTER TABLE t1 CHANGE COLUMN x b varchar(32);
SHOW CREATE TABLE t1;
Table	Create Table
t1	CREATE TABLE `t1` (
  `a` int(11) NOT NULL,
  `b` varchar(32) DEFAULT NULL,
  `c` char(16) DEFAULT NULL,
  `d` date DEFAULT NULL,
  `e` double DEFAULT NULL,
  `f` bit(3) DEFAULT NULL,
  PRIMARY KEY (`a`),
  KEY `idx1` (`b`,`e`),
  KEY `idx2` (`c`,`d`),
  KEY `idx3` (`d`),
  KEY `idx4` (`e`,`b`,`d`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
SELECT * FROM mysql.column_stats;
db_name	table_name	column_name	min_value	max_value	nulls_ratio	avg_length	avg_frequency	hist_size	hist_type	histogram
test	t1	a	0	49	0.0000	4.0000	1.0000	0	NULL	NULL
test	t1	c	aaaa	dddddddd	0.1250	6.6571	7.0000	0	NULL	NULL
test	t1	d	1989-03-12	1999-07-23	0.1500	3.0000	8.5000	0	NULL	NULL
test	t1	e	0.01	0.112	0.2250	8.0000	6.2000	0	NULL	NULL
test	t1	f	1	5	0.2000	1.0000	6.4000	0	NULL	NULL
SELECT * FROM mysql.index_stats;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	t1	PRIMARY	1	1.0000
test	t1	idx2	1	7.0000
test	t1	idx2	2	2.3846
test	t1	idx3	1	8.5000
ANALYZE TABLE t1 PERSISTENT FOR COLUMNS(b) INDEXES(idx1, idx4);
Table	Op	Msg_type	Msg_text
test.t1	analyze	status	Engine-independent statistics collected
test.t1	analyze	status	OK
SELECT * FROM mysql.column_stats;
db_name	table_name	column_name	min_value	max_value	nulls_ratio	avg_length	avg_frequency	hist_size	hist_type	histogram
test	t1	a	0	49	0.0000	4.0000	1.0000	0	NULL	NULL
test	t1	b	vvvvvvvvvvvvv	zzzzzzzzzzzzzzzzzz	0.2000	17.1250	6.4000	0	NULL	NULL
test	t1	c	aaaa	dddddddd	0.1250	6.6571	7.0000	0	NULL	NULL
test	t1	d	1989-03-12	1999-07-23	0.1500	3.0000	8.5000	0	NULL	NULL
test	t1	e	0.01	0.112	0.2250	8.0000	6.2000	0	NULL	NULL
test	t1	f	1	5	0.2000	1.0000	6.4000	0	NULL	NULL
SELECT * FROM mysql.index_stats;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	t1	PRIMARY	1	1.0000
test	t1	idx1	1	6.4000
test	t1	idx1	2	1.6875
test	t1	idx2	1	7.0000
test	t1	idx2	2	2.3846
test	t1	idx3	1	8.5000
test	t1	idx4	1	6.2000
test	t1	idx4	2	1.6875
test	t1	idx4	3	1.1304
SELECT * INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/save_column_stats'
  FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n'
  FROM mysql.column_stats WHERE column_name='b';
SELECT * INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/save_index_stats'
  FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n'
  FROM mysql.index_stats WHERE index_name IN ('idx1', 'idx4');
ALTER TABLE t1 CHANGE COLUMN b x varchar(30);
SHOW CREATE TABLE t1;
Table	Create Table
t1	CREATE TABLE `t1` (
  `a` int(11) NOT NULL,
  `x` varchar(30) DEFAULT NULL,
  `c` char(16) DEFAULT NULL,
  `d` date DEFAULT NULL,
  `e` double DEFAULT NULL,
  `f` bit(3) DEFAULT NULL,
  PRIMARY KEY (`a`),
  KEY `idx1` (`x`,`e`),
  KEY `idx2` (`c`,`d`),
  KEY `idx3` (`d`),
  KEY `idx4` (`e`,`x`,`d`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
SELECT * FROM mysql.column_stats;
db_name	table_name	column_name	min_value	max_value	nulls_ratio	avg_length	avg_frequency	hist_size	hist_type	histogram
test	t1	a	0	49	0.0000	4.0000	1.0000	0	NULL	NULL
test	t1	c	aaaa	dddddddd	0.1250	6.6571	7.0000	0	NULL	NULL
test	t1	d	1989-03-12	1999-07-23	0.1500	3.0000	8.5000	0	NULL	NULL
test	t1	e	0.01	0.112	0.2250	8.0000	6.2000	0	NULL	NULL
test	t1	f	1	5	0.2000	1.0000	6.4000	0	NULL	NULL
SELECT * FROM mysql.index_stats;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	t1	PRIMARY	1	1.0000
test	t1	idx2	1	7.0000
test	t1	idx2	2	2.3846
test	t1	idx3	1	8.5000
ALTER TABLE t1 CHANGE COLUMN x b varchar(32);
SHOW CREATE TABLE t1;
Table	Create Table
t1	CREATE TABLE `t1` (
  `a` int(11) NOT NULL,
  `b` varchar(32) DEFAULT NULL,
  `c` char(16) DEFAULT NULL,
  `d` date DEFAULT NULL,
  `e` double DEFAULT NULL,
  `f` bit(3) DEFAULT NULL,
  PRIMARY KEY (`a`),
  KEY `idx1` (`b`,`e`),
  KEY `idx2` (`c`,`d`),
  KEY `idx3` (`d`),
  KEY `idx4` (`e`,`b`,`d`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
SELECT * FROM mysql.column_stats;
db_name	table_name	column_name	min_value	max_value	nulls_ratio	avg_length	avg_frequency	hist_size	hist_type	histogram
test	t1	a	0	49	0.0000	4.0000	1.0000	0	NULL	NULL
test	t1	c	aaaa	dddddddd	0.1250	6.6571	7.0000	0	NULL	NULL
test	t1	d	1989-03-12	1999-07-23	0.1500	3.0000	8.5000	0	NULL	NULL
test	t1	e	0.01	0.112	0.2250	8.0000	6.2000	0	NULL	NULL
test	t1	f	1	5	0.2000	1.0000	6.4000	0	NULL	NULL
SELECT * FROM mysql.index_stats;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	t1	PRIMARY	1	1.0000
test	t1	idx2	1	7.0000
test	t1	idx2	2	2.3846
test	t1	idx3	1	8.5000
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/save_column_stats'
  INTO TABLE mysql.column_stats
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n';
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/save_index_stats'
  INTO TABLE mysql.index_stats
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n';
SELECT * FROM mysql.column_stats;
db_name	table_name	column_name	min_value	max_value	nulls_ratio	avg_length	avg_frequency	hist_size	hist_type	histogram
test	t1	a	0	49	0.0000	4.0000	1.0000	0	NULL	NULL
test	t1	b	vvvvvvvvvvvvv	zzzzzzzzzzzzzzzzzz	0.2000	17.1250	6.4000	0	NULL	NULL
test	t1	c	aaaa	dddddddd	0.1250	6.6571	7.0000	0	NULL	NULL
test	t1	d	1989-03-12	1999-07-23	0.1500	3.0000	8.5000	0	NULL	NULL
test	t1	e	0.01	0.112	0.2250	8.0000	6.2000	0	NULL	NULL
test	t1	f	1	5	0.2000	1.0000	6.4000	0	NULL	NULL
SELECT * FROM mysql.index_stats;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	t1	PRIMARY	1	1.0000
test	t1	idx1	1	6.4000
test	t1	idx1	2	1.6875
test	t1	idx2	1	7.0000
test	t1	idx2	2	2.3846
test	t1	idx3	1	8.5000
test	t1	idx4	1	6.2000
test	t1	idx4	2	1.6875
test	t1	idx4	3	1.1304
ALTER TABLE t1 DROP COLUMN b;
SHOW CREATE TABLE t1;
Table	Create Table
t1	CREATE TABLE `t1` (
  `a` int(11) NOT NULL,
  `c` char(16) DEFAULT NULL,
  `d` date DEFAULT NULL,
  `e` double DEFAULT NULL,
  `f` bit(3) DEFAULT NULL,
  PRIMARY KEY (`a`),
  KEY `idx1` (`e`),
  KEY `idx2` (`c`,`d`),
  KEY `idx3` (`d`),
  KEY `idx4` (`e`,`d`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
SELECT * FROM mysql.column_stats;
db_name	table_name	column_name	min_value	max_value	nulls_ratio	avg_length	avg_frequency	hist_size	hist_type	histogram
test	t1	a	0	49	0.0000	4.0000	1.0000	0	NULL	NULL
test	t1	c	aaaa	dddddddd	0.1250	6.6571	7.0000	0	NULL	NULL
test	t1	d	1989-03-12	1999-07-23	0.1500	3.0000	8.5000	0	NULL	NULL
test	t1	e	0.01	0.112	0.2250	8.0000	6.2000	0	NULL	NULL
test	t1	f	1	5	0.2000	1.0000	6.4000	0	NULL	NULL
SELECT * FROM mysql.index_stats;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	t1	PRIMARY	1	1.0000
test	t1	idx2	1	7.0000
test	t1	idx2	2	2.3846
test	t1	idx3	1	8.5000
DROP INDEX idx2 ON t1;
SHOW CREATE TABLE t1;
Table	Create Table
t1	CREATE TABLE `t1` (
  `a` int(11) NOT NULL,
  `c` char(16) DEFAULT NULL,
  `d` date DEFAULT NULL,
  `e` double DEFAULT NULL,
  `f` bit(3) DEFAULT NULL,
  PRIMARY KEY (`a`),
  KEY `idx1` (`e`),
  KEY `idx3` (`d`),
  KEY `idx4` (`e`,`d`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
SELECT * FROM mysql.index_stats;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	t1	PRIMARY	1	1.0000
test	t1	idx3	1	8.5000
DROP INDEX idx1 ON t1;
DROP INDEX idx4 ON t1;
SHOW CREATE TABLE t1;
Table	Create Table
t1	CREATE TABLE `t1` (
  `a` int(11) NOT NULL,
  `c` char(16) DEFAULT NULL,
  `d` date DEFAULT NULL,
  `e` double DEFAULT NULL,
  `f` bit(3) DEFAULT NULL,
  PRIMARY KEY (`a`),
  KEY `idx3` (`d`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
ALTER TABLE t1 ADD COLUMN b varchar(32);
CREATE INDEX idx1 ON t1(b, e);
CREATE INDEX idx2 ON t1(c, d);
CREATE INDEX idx4 ON t1(e, b, d);
SHOW CREATE TABLE t1;
Table	Create Table
t1	CREATE TABLE `t1` (
  `a` int(11) NOT NULL,
  `c` char(16) DEFAULT NULL,
  `d` date DEFAULT NULL,
  `e` double DEFAULT NULL,
  `f` bit(3) DEFAULT NULL,
  `b` varchar(32) DEFAULT NULL,
  PRIMARY KEY (`a`),
  KEY `idx3` (`d`),
  KEY `idx1` (`b`,`e`),
  KEY `idx2` (`c`,`d`),
  KEY `idx4` (`e`,`b`,`d`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
SELECT * FROM mysql.column_stats;
db_name	table_name	column_name	min_value	max_value	nulls_ratio	avg_length	avg_frequency	hist_size	hist_type	histogram
test	t1	a	0	49	0.0000	4.0000	1.0000	0	NULL	NULL
test	t1	c	aaaa	dddddddd	0.1250	6.6571	7.0000	0	NULL	NULL
test	t1	d	1989-03-12	1999-07-23	0.1500	3.0000	8.5000	0	NULL	NULL
test	t1	e	0.01	0.112	0.2250	8.0000	6.2000	0	NULL	NULL
test	t1	f	1	5	0.2000	1.0000	6.4000	0	NULL	NULL
SELECT * FROM mysql.index_stats;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	t1	PRIMARY	1	1.0000
test	t1	idx3	1	8.5000
ANALYZE TABLE t1 PERSISTENT FOR COLUMNS(b) INDEXES(idx1, idx2, idx4);
Table	Op	Msg_type	Msg_text
test.t1	analyze	status	Engine-independent statistics collected
test.t1	analyze	status	OK
SELECT * FROM mysql.column_stats;
db_name	table_name	column_name	min_value	max_value	nulls_ratio	avg_length	avg_frequency	hist_size	hist_type	histogram
test	t1	a	0	49	0.0000	4.0000	1.0000	0	NULL	NULL
test	t1	b	NULL	NULL	1.0000	NULL	NULL	0	NULL	NULL
test	t1	c	aaaa	dddddddd	0.1250	6.6571	7.0000	0	NULL	NULL
test	t1	d	1989-03-12	1999-07-23	0.1500	3.0000	8.5000	0	NULL	NULL
test	t1	e	0.01	0.112	0.2250	8.0000	6.2000	0	NULL	NULL
test	t1	f	1	5	0.2000	1.0000	6.4000	0	NULL	NULL
SELECT * FROM mysql.index_stats;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	t1	PRIMARY	1	1.0000
test	t1	idx1	1	NULL
test	t1	idx1	2	NULL
test	t1	idx2	1	7.0000
test	t1	idx2	2	2.3846
test	t1	idx3	1	8.5000
test	t1	idx4	1	6.2000
test	t1	idx4	2	NULL
test	t1	idx4	3	NULL
UPDATE t1 SET b=(SELECT b FROM t0 WHERE t0.a= t1.a);
ANALYZE TABLE t1 PERSISTENT FOR COLUMNS(b) INDEXES(idx1, idx2, idx4);
Table	Op	Msg_type	Msg_text
test.t1	analyze	status	Engine-independent statistics collected
test.t1	analyze	status	OK
SELECT * FROM mysql.column_stats;
db_name	table_name	column_name	min_value	max_value	nulls_ratio	avg_length	avg_frequency	hist_size	hist_type	histogram
test	t1	a	0	49	0.0000	4.0000	1.0000	0	NULL	NULL
test	t1	b	vvvvvvvvvvvvv	zzzzzzzzzzzzzzzzzz	0.2000	17.1250	6.4000	0	NULL	NULL
test	t1	c	aaaa	dddddddd	0.1250	6.6571	7.0000	0	NULL	NULL
test	t1	d	1989-03-12	1999-07-23	0.1500	3.0000	8.5000	0	NULL	NULL
test	t1	e	0.01	0.112	0.2250	8.0000	6.2000	0	NULL	NULL
test	t1	f	1	5	0.2000	1.0000	6.4000	0	NULL	NULL
SELECT * FROM mysql.index_stats;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	t1	PRIMARY	1	1.0000
test	t1	idx1	1	6.4000
test	t1	idx1	2	1.6875
test	t1	idx2	1	7.0000
test	t1	idx2	2	2.3846
test	t1	idx3	1	8.5000
test	t1	idx4	1	6.2000
test	t1	idx4	2	1.6875
test	t1	idx4	3	1.1304
ALTER TABLE t1 DROP COLUMN b,
DROP INDEX idx1, DROP INDEX idx2, DROP INDEX idx4;
SHOW CREATE TABLE t1;
Table	Create Table
t1	CREATE TABLE `t1` (
  `a` int(11) NOT NULL,
  `c` char(16) DEFAULT NULL,
  `d` date DEFAULT NULL,
  `e` double DEFAULT NULL,
  `f` bit(3) DEFAULT NULL,
  PRIMARY KEY (`a`),
  KEY `idx3` (`d`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
SELECT * FROM mysql.column_stats;
db_name	table_name	column_name	min_value	max_value	nulls_ratio	avg_length	avg_frequency	hist_size	hist_type	histogram
test	t1	a	0	49	0.0000	4.0000	1.0000	0	NULL	NULL
test	t1	c	aaaa	dddddddd	0.1250	6.6571	7.0000	0	NULL	NULL
test	t1	d	1989-03-12	1999-07-23	0.1500	3.0000	8.5000	0	NULL	NULL
test	t1	e	0.01	0.112	0.2250	8.0000	6.2000	0	NULL	NULL
test	t1	f	1	5	0.2000	1.0000	6.4000	0	NULL	NULL
SELECT * FROM mysql.index_stats;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	t1	PRIMARY	1	1.0000
test	t1	idx3	1	8.5000
ALTER TABLE t1 ADD COLUMN b varchar(32);
ALTER TABLE t1 
ADD INDEX idx1 (b, e), ADD INDEX idx2 (c, d), ADD INDEX idx4 (e, b, d);
UPDATE t1 SET b=(SELECT b FROM t0 WHERE t0.a= t1.a);
SHOW CREATE TABLE t1;
Table	Create Table
t1	CREATE TABLE `t1` (
  `a` int(11) NOT NULL,
  `c` char(16) DEFAULT NULL,
  `d` date DEFAULT NULL,
  `e` double DEFAULT NULL,
  `f` bit(3) DEFAULT NULL,
  `b` varchar(32) DEFAULT NULL,
  PRIMARY KEY (`a`),
  KEY `idx3` (`d`),
  KEY `idx1` (`b`,`e`),
  KEY `idx2` (`c`,`d`),
  KEY `idx4` (`e`,`b`,`d`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
SELECT * FROM mysql.column_stats;
db_name	table_name	column_name	min_value	max_value	nulls_ratio	avg_length	avg_frequency	hist_size	hist_type	histogram
test	t1	a	0	49	0.0000	4.0000	1.0000	0	NULL	NULL
test	t1	c	aaaa	dddddddd	0.1250	6.6571	7.0000	0	NULL	NULL
test	t1	d	1989-03-12	1999-07-23	0.1500	3.0000	8.5000	0	NULL	NULL
test	t1	e	0.01	0.112	0.2250	8.0000	6.2000	0	NULL	NULL
test	t1	f	1	5	0.2000	1.0000	6.4000	0	NULL	NULL
SELECT * FROM mysql.index_stats;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	t1	PRIMARY	1	1.0000
test	t1	idx3	1	8.5000
ANALYZE TABLE t1 PERSISTENT FOR COLUMNS(b) INDEXES(idx1, idx2, idx4);
Table	Op	Msg_type	Msg_text
test.t1	analyze	status	Engine-independent statistics collected
test.t1	analyze	status	OK
SELECT * FROM mysql.column_stats;
db_name	table_name	column_name	min_value	max_value	nulls_ratio	avg_length	avg_frequency	hist_size	hist_type	histogram
test	t1	a	0	49	0.0000	4.0000	1.0000	0	NULL	NULL
test	t1	b	vvvvvvvvvvvvv	zzzzzzzzzzzzzzzzzz	0.2000	17.1250	6.4000	0	NULL	NULL
test	t1	c	aaaa	dddddddd	0.1250	6.6571	7.0000	0	NULL	NULL
test	t1	d	1989-03-12	1999-07-23	0.1500	3.0000	8.5000	0	NULL	NULL
test	t1	e	0.01	0.112	0.2250	8.0000	6.2000	0	NULL	NULL
test	t1	f	1	5	0.2000	1.0000	6.4000	0	NULL	NULL
SELECT * FROM mysql.index_stats;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	t1	PRIMARY	1	1.0000
test	t1	idx1	1	6.4000
test	t1	idx1	2	1.6875
test	t1	idx2	1	7.0000
test	t1	idx2	2	2.3846
test	t1	idx3	1	8.5000
test	t1	idx4	1	6.2000
test	t1	idx4	2	1.6875
test	t1	idx4	3	1.1304
DELETE FROM mysql.table_stats;
DELETE FROM mysql.column_stats;
DELETE FROM mysql.index_stats;
ANALYZE TABLE t1 PERSISTENT FOR COLUMNS() INDEXES();
Table	Op	Msg_type	Msg_text
test.t1	analyze	status	Engine-independent statistics collected
test.t1	analyze	status	Table is already up to date
SELECT * FROM mysql.table_stats;
db_name	table_name	cardinality
test	t1	40
SELECT * FROM mysql.column_stats;
db_name	table_name	column_name	min_value	max_value	nulls_ratio	avg_length	avg_frequency	hist_size	hist_type	histogram
SELECT * FROM mysql.index_stats;
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	Engine-independent statistics collected
test.t1	analyze	status	Table is already up to date
SELECT * FROM mysql.table_stats;
db_name	table_name	cardinality
test	t1	40
SELECT * FROM mysql.column_stats;
db_name	table_name	column_name	min_value	max_value	nulls_ratio	avg_length	avg_frequency	hist_size	hist_type	histogram
test	t1	b	vvvvvvvvvvvvv	zzzzzzzzzzzzzzzzzz	0.2000	17.1250	6.4000	0	NULL	NULL
test	t1	c	aaaa	dddddddd	0.1250	6.6571	7.0000	0	NULL	NULL
test	t1	e	0.01	0.112	0.2250	8.0000	6.2000	0	NULL	NULL
SELECT * FROM mysql.index_stats;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	t1	idx2	1	7.0000
test	t1	idx2	2	2.3846
test	t1	idx4	1	6.2000
test	t1	idx4	2	1.6875
test	t1	idx4	3	1.1304
DELETE FROM mysql.index_stats WHERE table_name='t1' AND index_name='primary';
SELECT * FROM mysql.index_stats;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	t1	idx2	1	7.0000
test	t1	idx2	2	2.3846
test	t1	idx4	1	6.2000
test	t1	idx4	2	1.6875
test	t1	idx4	3	1.1304
ANALYZE TABLE t1 PERSISTENT FOR COLUMNS() INDEXES(primary);
Table	Op	Msg_type	Msg_text
test.t1	analyze	status	Engine-independent statistics collected
test.t1	analyze	status	Table is already up to date
SELECT * FROM mysql.index_stats;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	t1	PRIMARY	1	1.0000
test	t1	idx2	1	7.0000
test	t1	idx2	2	2.3846
test	t1	idx4	1	6.2000
test	t1	idx4	2	1.6875
test	t1	idx4	3	1.1304
DELETE FROM mysql.table_stats;
DELETE FROM mysql.column_stats;
DELETE FROM mysql.index_stats;
ANALYZE TABLE t1 PERSISTENT FOR COLUMNS ALL INDEXES ALL;
Table	Op	Msg_type	Msg_text
test.t1	analyze	status	Engine-independent statistics collected
test.t1	analyze	status	Table is already up to date
SELECT * FROM mysql.table_stats;
db_name	table_name	cardinality
test	t1	40
SELECT * FROM mysql.column_stats;
db_name	table_name	column_name	min_value	max_value	nulls_ratio	avg_length	avg_frequency	hist_size	hist_type	histogram
test	t1	a	0	49	0.0000	4.0000	1.0000	0	NULL	NULL
test	t1	b	vvvvvvvvvvvvv	zzzzzzzzzzzzzzzzzz	0.2000	17.1250	6.4000	0	NULL	NULL
test	t1	c	aaaa	dddddddd	0.1250	6.6571	7.0000	0	NULL	NULL
test	t1	d	1989-03-12	1999-07-23	0.1500	3.0000	8.5000	0	NULL	NULL
test	t1	e	0.01	0.112	0.2250	8.0000	6.2000	0	NULL	NULL
test	t1	f	1	5	0.2000	1.0000	6.4000	0	NULL	NULL
SELECT * FROM mysql.index_stats;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	t1	PRIMARY	1	1.0000
test	t1	idx1	1	6.4000
test	t1	idx1	2	1.6875
test	t1	idx2	1	7.0000
test	t1	idx2	2	2.3846
test	t1	idx3	1	8.5000
test	t1	idx4	1	6.2000
test	t1	idx4	2	1.6875
test	t1	idx4	3	1.1304
CREATE TABLE t2 LIKE t1;
ALTER TABLE t2 ENGINE=InnoDB;
INSERT INTO t2 SELECT * FROM t1;
set optimizer_switch='extended_keys=off';
ANALYZE TABLE t2;
Table	Op	Msg_type	Msg_text
test.t2	analyze	status	Engine-independent statistics collected
test.t2	analyze	status	OK
SELECT * FROM mysql.table_stats;
db_name	table_name	cardinality
test	t1	40
test	t2	40
SELECT * FROM mysql.column_stats ORDER BY column_name, table_name;
db_name	table_name	column_name	min_value	max_value	nulls_ratio	avg_length	avg_frequency	hist_size	hist_type	histogram
test	t1	a	0	49	0.0000	4.0000	1.0000	0	NULL	NULL
test	t2	a	0	49	0.0000	4.0000	1.0000	0	NULL	NULL
test	t1	b	vvvvvvvvvvvvv	zzzzzzzzzzzzzzzzzz	0.2000	17.1250	6.4000	0	NULL	NULL
test	t2	b	vvvvvvvvvvvvv	zzzzzzzzzzzzzzzzzz	0.2000	17.1250	6.4000	0	NULL	NULL
test	t1	c	aaaa	dddddddd	0.1250	6.6571	7.0000	0	NULL	NULL
test	t2	c	aaaa	dddddddd	0.1250	6.6571	7.0000	0	NULL	NULL
test	t1	d	1989-03-12	1999-07-23	0.1500	3.0000	8.5000	0	NULL	NULL
test	t2	d	1989-03-12	1999-07-23	0.1500	3.0000	8.5000	0	NULL	NULL
test	t1	e	0.01	0.112	0.2250	8.0000	6.2000	0	NULL	NULL
test	t2	e	0.01	0.112	0.2250	8.0000	6.2000	0	NULL	NULL
test	t1	f	1	5	0.2000	1.0000	6.4000	0	NULL	NULL
test	t2	f	1	5	0.2000	1.0000	6.4000	0	NULL	NULL
SELECT * FROM mysql.index_stats 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
test	t1	idx1	1	6.4000
test	t2	idx1	1	6.4000
test	t1	idx1	2	1.6875
test	t2	idx1	2	1.6875
test	t1	idx2	1	7.0000
test	t2	idx2	1	7.0000
test	t1	idx2	2	2.3846
test	t2	idx2	2	2.3846
test	t1	idx3	1	8.5000
test	t2	idx3	1	8.5000
test	t1	idx4	1	6.2000
test	t2	idx4	1	6.2000
test	t1	idx4	2	1.6875
test	t2	idx4	2	1.6875
test	t1	idx4	3	1.1304
test	t2	idx4	3	1.1304
DELETE FROM mysql.table_stats;
DELETE FROM mysql.column_stats;
DELETE FROM mysql.index_stats;
set optimizer_switch='extended_keys=on';
ANALYZE TABLE t2;
Table	Op	Msg_type	Msg_text
test.t2	analyze	status	Engine-independent statistics collected
test.t2	analyze	status	OK
SELECT * FROM mysql.table_stats;
db_name	table_name	cardinality
test	t2	40
SELECT * FROM mysql.column_stats ORDER BY column_name;
db_name	table_name	column_name	min_value	max_value	nulls_ratio	avg_length	avg_frequency	hist_size	hist_type	histogram
test	t2	a	0	49	0.0000	4.0000	1.0000	0	NULL	NULL
test	t2	b	vvvvvvvvvvvvv	zzzzzzzzzzzzzzzzzz	0.2000	17.1250	6.4000	0	NULL	NULL
test	t2	c	aaaa	dddddddd	0.1250	6.6571	7.0000	0	NULL	NULL
test	t2	d	1989-03-12	1999-07-23	0.1500	3.0000	8.5000	0	NULL	NULL
test	t2	e	0.01	0.112	0.2250	8.0000	6.2000	0	NULL	NULL
test	t2	f	1	5	0.2000	1.0000	6.4000	0	NULL	NULL
SELECT * FROM mysql.index_stats ORDER BY index_name, prefix_arity, table_name;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	t2	PRIMARY	1	1.0000
test	t2	idx1	1	6.4000
test	t2	idx1	2	1.6875
test	t2	idx1	3	1.0000
test	t2	idx2	1	7.0000
test	t2	idx2	2	2.3846
test	t2	idx2	3	1.0000
test	t2	idx3	1	8.5000
test	t2	idx3	2	1.0000
test	t2	idx4	1	6.2000
test	t2	idx4	2	1.6875
test	t2	idx4	3	1.1304
test	t2	idx4	4	1.0000
ALTER TABLE t2 DROP PRIMARY KEY, DROP INDEX idx1;
SELECT * FROM mysql.index_stats ORDER BY index_name, prefix_arity, table_name;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	t2	idx2	1	7.0000
test	t2	idx2	2	2.3846
test	t2	idx3	1	8.5000
test	t2	idx4	1	6.2000
test	t2	idx4	2	1.6875
test	t2	idx4	3	1.1304
UPDATE t2 SET b=0 WHERE b IS NULL;
ALTER TABLE t2 ADD PRIMARY KEY (a,b);
SELECT * FROM mysql.index_stats ORDER BY index_name, prefix_arity, table_name;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	t2	idx2	1	7.0000
test	t2	idx2	2	2.3846
test	t2	idx3	1	8.5000
test	t2	idx4	1	6.2000
test	t2	idx4	2	1.6875
test	t2	idx4	3	1.1304
ANALYZE TABLE t2 PERSISTENT FOR COLUMNS() INDEXES ALL;
Table	Op	Msg_type	Msg_text
test.t2	analyze	status	Engine-independent statistics collected
test.t2	analyze	status	OK
SELECT * FROM mysql.index_stats ORDER BY index_name, prefix_arity, table_name;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	t2	PRIMARY	1	1.0000
test	t2	PRIMARY	2	1.0000
test	t2	idx2	1	7.0000
test	t2	idx2	2	2.3846
test	t2	idx2	3	1.0000
test	t2	idx2	4	1.0000
test	t2	idx3	1	8.5000
test	t2	idx3	2	1.0000
test	t2	idx3	3	1.0000
test	t2	idx4	1	6.2000
test	t2	idx4	2	1.7222
test	t2	idx4	3	1.1154
test	t2	idx4	4	1.0000
ALTER TABLE t2 CHANGE COLUMN b b varchar(30);
SELECT * FROM mysql.index_stats ORDER BY index_name, prefix_arity, table_name;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	t2	idx2	1	7.0000
test	t2	idx2	2	2.3846
test	t2	idx3	1	8.5000
ANALYZE TABLE t2 PERSISTENT FOR COLUMNS ALL INDEXES ALL;
Table	Op	Msg_type	Msg_text
test.t2	analyze	status	Engine-independent statistics collected
test.t2	analyze	status	OK
SELECT * FROM mysql.index_stats ORDER BY index_name, prefix_arity, table_name;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	t2	PRIMARY	1	1.0000
test	t2	PRIMARY	2	1.0000
test	t2	idx2	1	7.0000
test	t2	idx2	2	2.3846
test	t2	idx2	3	1.0000
test	t2	idx2	4	1.0000
test	t2	idx3	1	8.5000
test	t2	idx3	2	1.0000
test	t2	idx3	3	1.0000
test	t2	idx4	1	6.2000
test	t2	idx4	2	1.7222
test	t2	idx4	3	1.1154
test	t2	idx4	4	1.0000
ALTER TABLE t2 CHANGE COLUMN b b varchar(32);
SELECT * FROM mysql.index_stats ORDER BY index_name, prefix_arity, table_name;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	t2	PRIMARY	1	1.0000
test	t2	PRIMARY	2	1.0000
test	t2	idx2	1	7.0000
test	t2	idx2	2	2.3846
test	t2	idx2	3	1.0000
test	t2	idx2	4	1.0000
test	t2	idx3	1	8.5000
test	t2	idx3	2	1.0000
test	t2	idx3	3	1.0000
test	t2	idx4	1	6.2000
test	t2	idx4	2	1.7222
test	t2	idx4	3	1.1154
test	t2	idx4	4	1.0000
ANALYZE TABLE t2 PERSISTENT FOR COLUMNS ALL INDEXES ALL;
Table	Op	Msg_type	Msg_text
test.t2	analyze	status	Engine-independent statistics collected
test.t2	analyze	status	OK
SELECT * FROM mysql.index_stats ORDER BY index_name, prefix_arity, table_name;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	t2	PRIMARY	1	1.0000
test	t2	PRIMARY	2	1.0000
test	t2	idx2	1	7.0000
test	t2	idx2	2	2.3846
test	t2	idx2	3	1.0000
test	t2	idx2	4	1.0000
test	t2	idx3	1	8.5000
test	t2	idx3	2	1.0000
test	t2	idx3	3	1.0000
test	t2	idx4	1	6.2000
test	t2	idx4	2	1.7222
test	t2	idx4	3	1.1154
test	t2	idx4	4	1.0000
ALTER TABLE t2 DROP COLUMN b, DROP PRIMARY KEY, ADD PRIMARY KEY(a);
SELECT * FROM mysql.index_stats ORDER BY index_name, prefix_arity, table_name;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	t2	idx2	1	7.0000
test	t2	idx2	2	2.3846
test	t2	idx3	1	8.5000
ANALYZE TABLE t2 PERSISTENT FOR COLUMNS() INDEXES ALL;
Table	Op	Msg_type	Msg_text
test.t2	analyze	status	Engine-independent statistics collected
test.t2	analyze	status	OK
SELECT * FROM mysql.index_stats ORDER BY index_name, prefix_arity, table_name;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	t2	PRIMARY	1	1.0000
test	t2	idx2	1	7.0000
test	t2	idx2	2	2.3846
test	t2	idx2	3	1.0000
test	t2	idx3	1	8.5000
test	t2	idx3	2	1.0000
test	t2	idx4	1	6.2000
test	t2	idx4	2	2.2308
test	t2	idx4	3	1.0000
set optimizer_switch='extended_keys=off';
ALTER TABLE t1
DROP INDEX idx1,
DROP INDEX idx4;
ALTER TABLE t1
MODIFY COLUMN b text,
ADD INDEX idx1 (b(4), e), 
ADD INDEX idx4 (e, b(4), d);
SELECT * FROM mysql.column_stats;
db_name	table_name	column_name	min_value	max_value	nulls_ratio	avg_length	avg_frequency	hist_size	hist_type	histogram
test	t2	a	0	49	0.0000	4.0000	1.0000	0	NULL	NULL
test	t2	c	aaaa	dddddddd	0.1250	6.6571	7.0000	0	NULL	NULL
test	t2	d	1989-03-12	1999-07-23	0.1500	3.0000	8.5000	0	NULL	NULL
test	t2	e	0.01	0.112	0.2250	8.0000	6.2000	0	NULL	NULL
test	t2	f	1	5	0.2000	1.0000	6.4000	0	NULL	NULL
SELECT * FROM mysql.index_stats;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	t2	PRIMARY	1	1.0000
test	t2	idx2	1	7.0000
test	t2	idx2	2	2.3846
test	t2	idx2	3	1.0000
test	t2	idx3	1	8.5000
test	t2	idx3	2	1.0000
test	t2	idx4	1	6.2000
test	t2	idx4	2	2.2308
test	t2	idx4	3	1.0000
ANALYZE TABLE t1;
Table	Op	Msg_type	Msg_text
test.t1	analyze	status	Engine-independent statistics collected
test.t1	analyze	Warning	Engine-independent statistics are not collected for column 'b'
test.t1	analyze	status	OK
SELECT * FROM mysql.column_stats;
db_name	table_name	column_name	min_value	max_value	nulls_ratio	avg_length	avg_frequency	hist_size	hist_type	histogram
test	t1	a	0	49	0.0000	4.0000	1.0000	0	NULL	NULL
test	t1	c	aaaa	dddddddd	0.1250	6.6571	7.0000	0	NULL	NULL
test	t1	d	1989-03-12	1999-07-23	0.1500	3.0000	8.5000	0	NULL	NULL
test	t1	e	0.01	0.112	0.2250	8.0000	6.2000	0	NULL	NULL
test	t1	f	1	5	0.2000	1.0000	6.4000	0	NULL	NULL
test	t2	a	0	49	0.0000	4.0000	1.0000	0	NULL	NULL
test	t2	c	aaaa	dddddddd	0.1250	6.6571	7.0000	0	NULL	NULL
test	t2	d	1989-03-12	1999-07-23	0.1500	3.0000	8.5000	0	NULL	NULL
test	t2	e	0.01	0.112	0.2250	8.0000	6.2000	0	NULL	NULL
test	t2	f	1	5	0.2000	1.0000	6.4000	0	NULL	NULL
SELECT * FROM mysql.index_stats;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	t1	PRIMARY	1	1.0000
test	t1	idx1	1	NULL
test	t1	idx1	2	NULL
test	t1	idx2	1	7.0000
test	t1	idx2	2	2.3846
test	t1	idx3	1	8.5000
test	t1	idx4	1	6.2000
test	t1	idx4	2	NULL
test	t1	idx4	3	NULL
test	t2	PRIMARY	1	1.0000
test	t2	idx2	1	7.0000
test	t2	idx2	2	2.3846
test	t2	idx2	3	1.0000
test	t2	idx3	1	8.5000
test	t2	idx3	2	1.0000
test	t2	idx4	1	6.2000
test	t2	idx4	2	2.2308
test	t2	idx4	3	1.0000
DELETE FROM mysql.table_stats;
DELETE FROM mysql.column_stats;
DELETE FROM mysql.index_stats;
ANALYZE TABLE mysql.column_stats PERSISTENT FOR ALL;
Table	Op	Msg_type	Msg_text
mysql.column_stats	analyze	error	Invalid argument
ANALYZE TABLE mysql.column_stats;
Table	Op	Msg_type	Msg_text
mysql.column_stats	analyze	status	OK
SELECT * FROM mysql.table_stats;
db_name	table_name	cardinality
SELECT * FROM mysql.column_stats;
db_name	table_name	column_name	min_value	max_value	nulls_ratio	avg_length	avg_frequency	hist_size	hist_type	histogram
SELECT * FROM mysql.index_stats;
db_name	table_name	index_name	prefix_arity	avg_frequency
set use_stat_tables='never';
ANALYZE TABLE t1 PERSISTENT FOR ALL;
Table	Op	Msg_type	Msg_text
test.t1	analyze	status	Engine-independent statistics collected
test.t1	analyze	Warning	Engine-independent statistics are not collected for column 'b'
test.t1	analyze	status	Table is already up to date
SELECT * FROM mysql.table_stats;
db_name	table_name	cardinality
test	t1	40
SELECT * FROM mysql.column_stats;
db_name	table_name	column_name	min_value	max_value	nulls_ratio	avg_length	avg_frequency	hist_size	hist_type	histogram
test	t1	a	0	49	0.0000	4.0000	1.0000	0	NULL	NULL
test	t1	c	aaaa	dddddddd	0.1250	6.6571	7.0000	0	NULL	NULL
test	t1	d	1989-03-12	1999-07-23	0.1500	3.0000	8.5000	0	NULL	NULL
test	t1	e	0.01	0.112	0.2250	8.0000	6.2000	0	NULL	NULL
test	t1	f	1	5	0.2000	1.0000	6.4000	0	NULL	NULL
SELECT * FROM mysql.index_stats;
db_name	table_name	index_name	prefix_arity	avg_frequency
test	t1	PRIMARY	1	1.0000
test	t1	idx1	1	NULL
test	t1	idx1	2	NULL
test	t1	idx2	1	7.0000
test	t1	idx2	2	2.3846
test	t1	idx3	1	8.5000
test	t1	idx4	1	6.2000
test	t1	idx4	2	NULL
test	t1	idx4	3	NULL
DELETE FROM mysql.table_stats;
DELETE FROM mysql.column_stats;
DELETE FROM mysql.index_stats;
ANALYZE TABLE t1 PERSISTENT FOR COLUMNS(b) INDEXES();
Table	Op	Msg_type	Msg_text
test.t1	analyze	status	Engine-independent statistics collected
test.t1	analyze	Warning	Engine-independent statistics are not collected for column 'b'
test.t1	analyze	status	Table is already up to date
ANALYZE TABLE t1 PERSISTENT FOR columns(a,b) INDEXES();
Table	Op	Msg_type	Msg_text
test.t1	analyze	status	Engine-independent statistics collected
test.t1	analyze	Warning	Engine-independent statistics are not collected for column 'b'
test.t1	analyze	status	Table is already up to date
ANALYZE TABLE t1 PERSISTENT FOR columns(b) indexes(idx2);
Table	Op	Msg_type	Msg_text
test.t1	analyze	status	Engine-independent statistics collected
test.t1	analyze	Warning	Engine-independent statistics are not collected for column 'b'
test.t1	analyze	status	Table is already up to date
ANALYZE TABLE t1 PERSISTENT FOR columns() indexes(idx2);
Table	Op	Msg_type	Msg_text
test.t1	analyze	status	Engine-independent statistics collected
test.t1	analyze	status	Table is already up to date
DELETE FROM mysql.table_stats;
DELETE FROM mysql.column_stats;
DELETE FROM mysql.index_stats;
DROP TABLE t1,t2;
set names utf8;
CREATE DATABASE world;
use world;
CREATE TABLE Country (
Code char(3) NOT NULL default '',
Name char(52) NOT NULL default '',
SurfaceArea float(10,2) NOT NULL default '0.00',
Population int(11) NOT NULL default '0',
Capital int(11) default NULL,
PRIMARY KEY  (Code),
UNIQUE INDEX (Name)
) CHARACTER SET utf8 COLLATE utf8_bin;
CREATE TABLE City (
ID int(11) NOT NULL auto_increment,
Name char(35) NOT NULL default '',
Country char(3) NOT NULL default '',
Population int(11) NOT NULL default '0',
PRIMARY KEY  (ID),
INDEX (Population),
INDEX (Country) 
) CHARACTER SET utf8 COLLATE utf8_bin;
CREATE TABLE CountryLanguage (
Country char(3) NOT NULL default '',
Language char(30) NOT NULL default '',
Percentage float(3,1) NOT NULL default '0.0',
PRIMARY KEY  (Country, Language),
INDEX (Percentage)
) CHARACTER SET utf8 COLLATE utf8_bin;
set use_stat_tables='preferably';
ANALYZE TABLE Country, City, CountryLanguage;
SELECT UPPER(db_name), UPPER(table_name), cardinality
FROM mysql.table_stats;
UPPER(db_name)	UPPER(table_name)	cardinality
WORLD	CITY	4079
WORLD	COUNTRY	239
WORLD	COUNTRYLANGUAGE	984
SELECT UPPER(db_name), UPPER(table_name), 
column_name, min_value, max_value, nulls_ratio, avg_length, avg_frequency
FROM mysql.column_stats;
UPPER(db_name)	UPPER(table_name)	column_name	min_value	max_value	nulls_ratio	avg_length	avg_frequency
WORLD	CITY	Country	ABW	ZWE	0.0000	3.0000	17.5819
WORLD	CITY	ID	1	4079	0.0000	4.0000	1.0000
WORLD	CITY	Name	A Coruña (La Coruña)	Ürgenc	0.0000	8.6416	1.0195
WORLD	CITY	Population	42	10500000	0.0000	4.0000	1.0467
WORLD	COUNTRY	Capital	1	4074	0.0293	4.0000	1.0000
WORLD	COUNTRY	Code	ABW	ZWE	0.0000	3.0000	1.0000
WORLD	COUNTRY	Name	Afghanistan	Zimbabwe	0.0000	10.1088	1.0000
WORLD	COUNTRY	Population	0	1277558000	0.0000	4.0000	1.0575
WORLD	COUNTRY	SurfaceArea	0.40	17075400.00	0.0000	4.0000	1.0042
WORLD	COUNTRYLANGUAGE	Country	ABW	ZWE	0.0000	3.0000	4.2232
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 mysql.index_stats;
UPPER(db_name)	UPPER(table_name)	index_name	prefix_arity	avg_frequency
WORLD	CITY	Country	1	17.5819
WORLD	CITY	PRIMARY	1	1.0000
WORLD	CITY	Population	1	1.0467
WORLD	COUNTRY	Name	1	1.0000
WORLD	COUNTRY	PRIMARY	1	1.0000
WORLD	COUNTRYLANGUAGE	PRIMARY	1	4.2232
WORLD	COUNTRYLANGUAGE	PRIMARY	2	1.0000
WORLD	COUNTRYLANGUAGE	Percentage	1	2.7640
use test;
set use_stat_tables='never';
CREATE DATABASE world_innodb;
use world_innodb;
CREATE TABLE Country (
Code char(3) NOT NULL default '',
Name char(52) NOT NULL default '',
SurfaceArea float(10,2) NOT NULL default '0.00',
Population int(11) NOT NULL default '0',
Capital int(11) default NULL,
PRIMARY KEY  (Code),
UNIQUE INDEX (Name)
) CHARACTER SET utf8 COLLATE utf8_bin;
CREATE TABLE City (
ID int(11) NOT NULL auto_increment,
Name char(35) NOT NULL default '',
Country char(3) NOT NULL default '',
Population int(11) NOT NULL default '0',
PRIMARY KEY  (ID),
INDEX (Population),
INDEX (Country) 
) CHARACTER SET utf8 COLLATE utf8_bin;
CREATE TABLE CountryLanguage (
Country char(3) NOT NULL default '',
Language char(30) NOT NULL default '',
Percentage float(3,1) NOT NULL default '0.0',
PRIMARY KEY  (Country, Language),
INDEX (Percentage)
) CHARACTER SET utf8 COLLATE utf8_bin;
ALTER TABLE Country ENGINE=InnoDB;
ALTER TABLE City ENGINE=InnoDB;
ALTER TABLE CountryLanguage ENGINE=InnoDB;
set use_stat_tables='preferably';
ANALYZE TABLE Country, City, CountryLanguage;
SELECT UPPER(db_name), UPPER(table_name), cardinality
FROM mysql.table_stats;
UPPER(db_name)	UPPER(table_name)	cardinality
WORLD	CITY	4079
WORLD	COUNTRY	239
WORLD	COUNTRYLANGUAGE	984
WORLD_INNODB	CITY	4079
WORLD_INNODB	COUNTRY	239
WORLD_INNODB	COUNTRYLANGUAGE	984
SELECT UPPER(db_name), UPPER(table_name), 
column_name, min_value, max_value, nulls_ratio, avg_length, avg_frequency
FROM mysql.column_stats;
UPPER(db_name)	UPPER(table_name)	column_name	min_value	max_value	nulls_ratio	avg_length	avg_frequency
WORLD	CITY	Country	ABW	ZWE	0.0000	3.0000	17.5819
WORLD	CITY	ID	1	4079	0.0000	4.0000	1.0000
WORLD	CITY	Name	A Coruña (La Coruña)	Ürgenc	0.0000	8.6416	1.0195
WORLD	CITY	Population	42	10500000	0.0000	4.0000	1.0467
WORLD	COUNTRY	Capital	1	4074	0.0293	4.0000	1.0000
WORLD	COUNTRY	Code	ABW	ZWE	0.0000	3.0000	1.0000
WORLD	COUNTRY	Name	Afghanistan	Zimbabwe	0.0000	10.1088	1.0000
WORLD	COUNTRY	Population	0	1277558000	0.0000	4.0000	1.0575
WORLD	COUNTRY	SurfaceArea	0.40	17075400.00	0.0000	4.0000	1.0042
WORLD	COUNTRYLANGUAGE	Country	ABW	ZWE	0.0000	3.0000	4.2232
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
WORLD_INNODB	CITY	Country	ABW	ZWE	0.0000	3.0000	17.5819
WORLD_INNODB	CITY	ID	1	4079	0.0000	4.0000	1.0000
WORLD_INNODB	CITY	Name	A Coruña (La Coruña)	Ürgenc	0.0000	8.6416	1.0195
WORLD_INNODB	CITY	Population	42	10500000	0.0000	4.0000	1.0467
WORLD_INNODB	COUNTRY	Capital	1	4074	0.0293	4.0000	1.0000
WORLD_INNODB	COUNTRY	Code	ABW	ZWE	0.0000	3.0000	1.0000
WORLD_INNODB	COUNTRY	Name	Afghanistan	Zimbabwe	0.0000	10.1088	1.0000
WORLD_INNODB	COUNTRY	Population	0	1277558000	0.0000	4.0000	1.0575
WORLD_INNODB	COUNTRY	SurfaceArea	0.40	17075400.00	0.0000	4.0000	1.0042
WORLD_INNODB	COUNTRYLANGUAGE	Country	ABW	ZWE	0.0000	3.0000	4.2232
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 mysql.index_stats;
UPPER(db_name)	UPPER(table_name)	index_name	prefix_arity	avg_frequency
WORLD	CITY	Country	1	17.5819
WORLD	CITY	PRIMARY	1	1.0000
WORLD	CITY	Population	1	1.0467
WORLD	COUNTRY	Name	1	1.0000
WORLD	COUNTRY	PRIMARY	1	1.0000
WORLD	COUNTRYLANGUAGE	PRIMARY	1	4.2232
WORLD	COUNTRYLANGUAGE	PRIMARY	2	1.0000
WORLD	COUNTRYLANGUAGE	Percentage	1	2.7640
WORLD_INNODB	CITY	Country	1	17.5819
WORLD_INNODB	CITY	PRIMARY	1	1.0000
WORLD_INNODB	CITY	Population	1	1.0467
WORLD_INNODB	COUNTRY	Name	1	1.0000
WORLD_INNODB	COUNTRY	PRIMARY	1	1.0000
WORLD_INNODB	COUNTRYLANGUAGE	PRIMARY	1	4.2232
WORLD_INNODB	COUNTRYLANGUAGE	PRIMARY	2	1.0000
WORLD_INNODB	COUNTRYLANGUAGE	Percentage	1	2.7640
use world;
set use_stat_tables='preferably';
set histogram_size=100;
set histogram_type='SINGLE_PREC_HB';
ANALYZE TABLE CountryLanguage;
set histogram_size=254;
set histogram_type='DOUBLE_PREC_HB';
ANALYZE TABLE City;
FLUSH TABLES;
select UPPER(db_name),UPPER(table_name),UPPER(column_name),min_value,max_value,nulls_ratio,avg_length,avg_frequency,hist_size,hist_type,hex(histogram),decode_histogram(hist_type,histogram) from mysql.column_stats where UPPER(db_name)='WORLD' and UPPER(table_name)='COUNTRYLANGUAGE' and UPPER(column_name) = 'PERCENTAGE';;
UPPER(db_name)	WORLD
UPPER(table_name)	COUNTRYLANGUAGE
UPPER(column_name)	PERCENTAGE
min_value	0.0
max_value	99.9
nulls_ratio	0.0000
avg_length	4.0000
avg_frequency	2.7640
hist_size	100
hist_type	SINGLE_PREC_HB
hex(histogram)	0000000000000000000000000101010101010101010202020303030304040404050505050606070707080809090A0A0B0C0D0D0E0E0F10111213131415161718191B1C1E202224292A2E33373B4850575F6A76818C9AA7B9C4CFDADFE5EBF0F4F8FAFCFF
decode_histogram(hist_type,histogram)	0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.004,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.004,0.000,0.000,0.004,0.000,0.000,0.000,0.004,0.000,0.000,0.000,0.004,0.000,0.000,0.000,0.004,0.000,0.004,0.000,0.000,0.004,0.000,0.004,0.000,0.004,0.000,0.004,0.004,0.004,0.000,0.004,0.000,0.004,0.004,0.004,0.004,0.004,0.000,0.004,0.004,0.004,0.004,0.004,0.004,0.008,0.004,0.008,0.008,0.008,0.008,0.020,0.004,0.016,0.020,0.016,0.016,0.051,0.031,0.027,0.031,0.043,0.047,0.043,0.043,0.055,0.051,0.071,0.043,0.043,0.043,0.020,0.024,0.024,0.020,0.016,0.016,0.008,0.008,0.012,0.000
select UPPER(db_name),UPPER(table_name),UPPER(column_name),min_value,max_value,nulls_ratio,avg_length,avg_frequency,hist_size,hist_type,hex(histogram),decode_histogram(hist_type,histogram) from mysql.column_stats where UPPER(db_name)='WORLD' and UPPER(table_name)='CITY' and UPPER(column_name) = 'POPULATION';;
UPPER(db_name)	WORLD
UPPER(table_name)	CITY
UPPER(column_name)	POPULATION
min_value	42
max_value	10500000
nulls_ratio	0.0000
avg_length	4.0000
avg_frequency	1.0467
hist_size	254
hist_type	DOUBLE_PREC_HB
hex(histogram)	1F00A1002B023002350238023F02430249024E02520258025D02630268026E02720276027B02800285028C02920297029D02A102A802AC02B402BC02C402CC02D302DA02E302EA02F102F802010305030C03120319031F03290333033D0343034F03590363036D037803840390039A03A603B303C303D103E003F203020412042404330440045304600472047F049104A204B804C804DE04F2040A0526053F0558056F058E05B305D905F4051306380667068406AB06DA06020731075C079407C507F8072E085E08A508DF0824096909CC092E0A760AD50A400BA90B150CAD0C310D240E130F0E103B11B9126B14F0166B192F1CB71FFF240630483FC567
decode_histogram(hist_type,histogram)	0.00047,0.00198,0.00601,0.00008,0.00008,0.00005,0.00011,0.00006,0.00009,0.00008,0.00006,0.00009,0.00008,0.00009,0.00008,0.00009,0.00006,0.00006,0.00008,0.00008,0.00008,0.00011,0.00009,0.00008,0.00009,0.00006,0.00011,0.00006,0.00012,0.00012,0.00012,0.00012,0.00011,0.00011,0.00014,0.00011,0.00011,0.00011,0.00014,0.00006,0.00011,0.00009,0.00011,0.00009,0.00015,0.00015,0.00015,0.00009,0.00018,0.00015,0.00015,0.00015,0.00017,0.00018,0.00018,0.00015,0.00018,0.00020,0.00024,0.00021,0.00023,0.00027,0.00024,0.00024,0.00027,0.00023,0.00020,0.00029,0.00020,0.00027,0.00020,0.00027,0.00026,0.00034,0.00024,0.00034,0.00031,0.00037,0.00043,0.00038,0.00038,0.00035,0.00047,0.00056,0.00058,0.00041,0.00047,0.00056,0.00072,0.00044,0.00060,0.00072,0.00061,0.00072,0.00066,0.00085,0.00075,0.00078,0.00082,0.00073,0.00108,0.00089,0.00105,0.00105,0.00151,0.00150,0.00110,0.00145,0.00163,0.00160,0.00165,0.00232,0.00201,0.00371,0.00365,0.00383,0.00459,0.00583,0.00662,0.00984,0.00969,0.01080,0.01379,0.02063,0.04308,0.05960,0.15816,0.59464
set histogram_type='single_prec_hb';
set histogram_size=0;
use test;
DROP DATABASE world;
SELECT UPPER(db_name), UPPER(table_name), cardinality
FROM mysql.table_stats;
UPPER(db_name)	UPPER(table_name)	cardinality
WORLD_INNODB	CITY	4079
WORLD_INNODB	COUNTRY	239
WORLD_INNODB	COUNTRYLANGUAGE	984
SELECT UPPER(db_name), UPPER(table_name), 
column_name, min_value, max_value, nulls_ratio, avg_length, avg_frequency
FROM mysql.column_stats;
UPPER(db_name)	UPPER(table_name)	column_name	min_value	max_value	nulls_ratio	avg_length	avg_frequency
WORLD_INNODB	CITY	Country	ABW	ZWE	0.0000	3.0000	17.5819
WORLD_INNODB	CITY	ID	1	4079	0.0000	4.0000	1.0000
WORLD_INNODB	CITY	Name	A Coruña (La Coruña)	Ürgenc	0.0000	8.6416	1.0195
WORLD_INNODB	CITY	Population	42	10500000	0.0000	4.0000	1.0467
WORLD_INNODB	COUNTRY	Capital	1	4074	0.0293	4.0000	1.0000
WORLD_INNODB	COUNTRY	Code	ABW	ZWE	0.0000	3.0000	1.0000
WORLD_INNODB	COUNTRY	Name	Afghanistan	Zimbabwe	0.0000	10.1088	1.0000
WORLD_INNODB	COUNTRY	Population	0	1277558000	0.0000	4.0000	1.0575
WORLD_INNODB	COUNTRY	SurfaceArea	0.40	17075400.00	0.0000	4.0000	1.0042
WORLD_INNODB	COUNTRYLANGUAGE	Country	ABW	ZWE	0.0000	3.0000	4.2232
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 mysql.index_stats;
UPPER(db_name)	UPPER(table_name)	index_name	prefix_arity	avg_frequency
WORLD_INNODB	CITY	Country	1	17.5819
WORLD_INNODB	CITY	PRIMARY	1	1.0000
WORLD_INNODB	CITY	Population	1	1.0467
WORLD_INNODB	COUNTRY	Name	1	1.0000
WORLD_INNODB	COUNTRY	PRIMARY	1	1.0000
WORLD_INNODB	COUNTRYLANGUAGE	PRIMARY	1	4.2232
WORLD_INNODB	COUNTRYLANGUAGE	PRIMARY	2	1.0000
WORLD_INNODB	COUNTRYLANGUAGE	Percentage	1	2.7640
DROP DATABASE world_innodb;
SELECT UPPER(db_name), UPPER(table_name), cardinality
FROM mysql.table_stats;
UPPER(db_name)	UPPER(table_name)	cardinality
SELECT UPPER(db_name), UPPER(table_name), 
column_name, min_value, max_value, nulls_ratio, avg_length, avg_frequency
FROM mysql.column_stats;
UPPER(db_name)	UPPER(table_name)	column_name	min_value	max_value	nulls_ratio	avg_length	avg_frequency
SELECT UPPER(db_name), UPPER(table_name),
index_name, prefix_arity, avg_frequency
FROM mysql.index_stats;
UPPER(db_name)	UPPER(table_name)	index_name	prefix_arity	avg_frequency
DELETE FROM mysql.table_stats;
DELETE FROM mysql.column_stats;
DELETE FROM mysql.index_stats;
#
# Bug mdev-4357: empty string as a value of the HIST_SIZE column 
#                from mysql.column_stats
#
create table t1 (a int);
insert into t1 values (1),(2),(3);
set histogram_size=10;
analyze table t1  persistent for all;
Table	Op	Msg_type	Msg_text
test.t1	analyze	status	Engine-independent statistics collected
test.t1	analyze	status	OK
select db_name, table_name, column_name,
min_value, max_value,
nulls_ratio, avg_frequency,
hist_size, hist_type, HEX(histogram)
FROM mysql.column_stats;
db_name	table_name	column_name	min_value	max_value	nulls_ratio	avg_frequency	hist_size	hist_type	HEX(histogram)
test	t1	a	1	3	0.0000	1.0000	10	SINGLE_PREC_HB	0000007F7F7F7FFFFFFF
set histogram_size=default;
drop table t1;
#
# Bug mdev-4359: wrong setting of the HIST_SIZE column 
# (see also mdev-4357)         from mysql.column_stats
#
create table t1 ( a int);
insert into t1 values (1),(2),(3),(4),(5);
set histogram_size=10;
set histogram_type='double_prec_hb';
show variables like 'histogram%';
Variable_name	Value
histogram_size	10
histogram_type	DOUBLE_PREC_HB
analyze table t1 persistent for all;
Table	Op	Msg_type	Msg_text
test.t1	analyze	status	Engine-independent statistics collected
test.t1	analyze	status	OK
select db_name, table_name, column_name,
min_value, max_value,
nulls_ratio, avg_frequency,
hist_size, hist_type, HEX(histogram)
FROM mysql.column_stats;
db_name	table_name	column_name	min_value	max_value	nulls_ratio	avg_frequency	hist_size	hist_type	HEX(histogram)
test	t1	a	1	5	0.0000	1.0000	10	DOUBLE_PREC_HB	0000FF3FFF7FFFBFFFFF
set histogram_size=0;
set histogram_type='single_prec_hb';
drop table t1;
#
# Bug mdev-4369: histogram for a column with many distinct values 
#
CREATE TABLE t1 (id int);
CREATE TABLE t2 (id int);
INSERT INTO t1 (id) VALUES (1), (1), (1),(1);
INSERT INTO t1 (id) SELECT id FROM t1;
INSERT INTO t1 SELECT id+1 FROM t1;
INSERT INTO t1 SELECT id+2 FROM t1;
INSERT INTO t1 SELECT id+4 FROM t1;
INSERT INTO t1 SELECT id+8 FROM t1;
INSERT INTO t1 SELECT id+16 FROM t1;
INSERT INTO t1 SELECT id+32 FROM t1;
INSERT INTO t1 SELECT id+64 FROM t1;
INSERT INTO t1 SELECT id+128 FROM t1;
INSERT INTO t1 SELECT id+256 FROM t1;
INSERT INTO t1 SELECT id+512 FROM t1;
INSERT INTO t2 SELECT id FROM t1 ORDER BY id*rand();
SELECT COUNT(*) FROM t2;
COUNT(*)
8192
SELECT COUNT(DISTINCT id) FROM t2;
COUNT(DISTINCT id)
1024
set @@tmp_table_size=1024*16;
set @@max_heap_table_size=1024*16;
set histogram_size=63;
analyze table t2 persistent for all;
Table	Op	Msg_type	Msg_text
test.t2	analyze	status	Engine-independent statistics collected
test.t2	analyze	status	OK
select db_name, table_name, column_name,
min_value, max_value,
nulls_ratio, avg_frequency,
hist_size, hist_type, HEX(histogram)
FROM mysql.column_stats;
db_name	table_name	column_name	min_value	max_value	nulls_ratio	avg_frequency	hist_size	hist_type	HEX(histogram)
test	t2	id	1	1024	0.0000	8.0000	63	SINGLE_PREC_HB	03070B0F13171B1F23272B2F33373B3F43474B4F53575B5F63676B6F73777B7F83878B8F93979B9FA3A7ABAFB3B7BBBFC3C7CBCFD3D7DBDFE3E7EBEFF3F7FB
set histogram_size=0;
drop table t1, t2;
set use_stat_tables=@save_use_stat_tables;
#
# Bug MDEV-7383: min/max value for a column not utf8 compatible
#
create table t1 (a varchar(100)) engine=MyISAM;
insert into t1 values(unhex('D879626AF872675F73E662F8'));
analyze table t1 persistent for all;
Table	Op	Msg_type	Msg_text
test.t1	analyze	status	Engine-independent statistics collected
test.t1	analyze	status	OK
show warnings;
Level	Code	Message
select db_name, table_name, column_name,
HEX(min_value), HEX(max_value),
nulls_ratio, avg_frequency,
hist_size, hist_type, HEX(histogram)
FROM mysql.column_stats;
db_name	table_name	column_name	HEX(min_value)	HEX(max_value)	nulls_ratio	avg_frequency	hist_size	hist_type	HEX(histogram)
test	t1	a	D879626AF872675F73E662F8	D879626AF872675F73E662F8	0.0000	1.0000	0	NULL	NULL
drop table t1;
#
# MDEB-9744: session optimizer_use_condition_selectivity=5 causing SQL Error (1918):
# Encountered illegal value '' when converting to DECIMAL
#
set @save_optimizer_use_condition_selectivity= @@optimizer_use_condition_selectivity;
set optimizer_use_condition_selectivity=3, use_stat_tables=preferably;
create table t1 (id int(10),cost decimal(9,2)) engine=innodb;
ANALYZE TABLE t1 PERSISTENT FOR ALL;
Table	Op	Msg_type	Msg_text
test.t1	analyze	status	Engine-independent statistics collected
test.t1	analyze	status	OK
create temporary table t2  (id int);
insert into t2 (id) select id from t1 where cost > 0;
select * from t2;
id
set use_stat_tables=@save_use_stat_tables;
set optimizer_use_condition_selectivity= @save_optimizer_use_condition_selectivity;
drop table t1,t2;
#
# MDEV-16507: statistics for temporary tables should not be used
#
SET
@save_optimizer_use_condition_selectivity= @@optimizer_use_condition_selectivity;
SET @@use_stat_tables = preferably ;
SET @@optimizer_use_condition_selectivity = 4;
CREATE TABLE t1 (
TIMESTAMP TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP
);
SET @had_t1_table= @@warning_count != 0;
CREATE TEMPORARY TABLE tmp_t1 LIKE t1;
INSERT INTO tmp_t1 VALUES (now());
INSERT INTO t1 SELECT * FROM tmp_t1 WHERE @had_t1_table=0;
DROP TABLE t1;
SET
use_stat_tables=@save_use_stat_tables;
SET
optimizer_use_condition_selectivity= @save_optimizer_use_condition_selectivity;
# End of 10.0 tests
#
# MDEV-9590: Always print "Engine-independent statistic" warnings and
# might be filtering columns unintentionally from engines
#
set use_stat_tables='NEVER';
create table t1 (test blob);
show variables like 'use_stat_tables';
Variable_name	Value
use_stat_tables	NEVER
analyze table t1;
Table	Op	Msg_type	Msg_text
test.t1	analyze	status	Table is already up to date
drop table t1;
#
# MDEV-10435 crash with bad stat tables
#
set use_stat_tables='preferably';
call mtr.add_suppression("Column count of mysql.table_stats is wrong. Expected 3, found 1. The table is probably corrupted");
rename table mysql.table_stats to test.table_stats;
flush tables;
create table t1 (a int);
rename table t1 to t2, t3 to t4;
ERROR 42S02: Table 'test.t3' doesn't exist
drop table t1;
rename table test.table_stats to mysql.table_stats;
rename table mysql.table_stats to test.table_stats;
create table mysql.table_stats (a int);
flush tables;
create table t1 (a int);
rename table t1 to t2, t3 to t4;
ERROR 42S02: Table 'test.t3' doesn't exist
drop table t1, mysql.table_stats;
rename table test.table_stats to mysql.table_stats;
set use_stat_tables=@save_use_stat_tables;
#
# Start of 10.2 tests
#
#
# MDEV-10134 Add full support for DEFAULT
#
CREATE TABLE t1 (a BLOB, b TEXT DEFAULT DECODE_HISTOGRAM('SINGLE_PREC_HB',a));
SHOW CREATE TABLE t1;
Table	Create Table
t1	CREATE TABLE `t1` (
  `a` blob DEFAULT NULL,
  `b` text DEFAULT decode_histogram('SINGLE_PREC_HB',`a`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
INSERT INTO t1 (a) VALUES (0x0000000000000000000000000101010101010101010202020303030304040404050505050606070707080809090A0A0B0C0D0D0E0E0F10111213131415161718191B1C1E202224292A2E33373B4850575F6A76818C9AA7B9C4CFDADFE5EBF0F4F8FAFCFF);
SELECT b FROM t1;
b
0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.004,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.004,0.000,0.000,0.004,0.000,0.000,0.000,0.004,0.000,0.000,0.000,0.004,0.000,0.000,0.000,0.004,0.000,0.004,0.000,0.000,0.004,0.000,0.004,0.000,0.004,0.000,0.004,0.004,0.004,0.000,0.004,0.000,0.004,0.004,0.004,0.004,0.004,0.000,0.004,0.004,0.004,0.004,0.004,0.004,0.008,0.004,0.008,0.008,0.008,0.008,0.020,0.004,0.016,0.020,0.016,0.016,0.051,0.031,0.027,0.031,0.043,0.047,0.043,0.043,0.055,0.051,0.071,0.043,0.043,0.043,0.020,0.024,0.024,0.020,0.016,0.016,0.008,0.008,0.012,0.000
DROP TABLE t1;
#
# End of 10.2 tests
#
set histogram_size=@save_hist_size, histogram_type=@save_hist_type;
#
# Start of 10.4 tests
#
#
# Test analyze_sample_percentage system variable.
#
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;
set histogram_size=10;
CREATE TABLE t1 (id int);
INSERT INTO t1 (id) VALUES (1), (1), (1), (1), (1), (1), (1);
INSERT INTO t1 (id) SELECT id FROM t1;
INSERT INTO t1 SELECT id+1 FROM t1;
INSERT INTO t1 SELECT id+2 FROM t1;
INSERT INTO t1 SELECT id+4 FROM t1;
INSERT INTO t1 SELECT id+8 FROM t1;
INSERT INTO t1 SELECT id+16 FROM t1;
INSERT INTO t1 SELECT id+32 FROM t1;
INSERT INTO t1 SELECT id+64 FROM t1;
INSERT INTO t1 SELECT id+128 FROM t1;
INSERT INTO t1 SELECT id+256 FROM t1;
INSERT INTO t1 SELECT id+512 FROM t1;
INSERT INTO t1 SELECT id+1024 FROM t1;
INSERT INTO t1 SELECT id+2048 FROM t1;
INSERT INTO t1 SELECT id+4096 FROM t1;
INSERT INTO t1 SELECT id+9192 FROM t1;
#
# This query will should show a full table scan analysis.
#
ANALYZE TABLE t1;
Table	Op	Msg_type	Msg_text
test.t1	analyze	status	Engine-independent statistics collected
test.t1	analyze	status	OK
select table_name, column_name, min_value, max_value, nulls_ratio, avg_length, avg_frequency,
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.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.
#
ANALYZE TABLE t1;
Table	Op	Msg_type	Msg_text
test.t1	analyze	status	Engine-independent statistics collected
test.t1	analyze	status	Table is already up to date
select table_name, column_name, min_value, max_value, nulls_ratio, avg_length, avg_frequency,
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	10.4739	0.13649,0.14922,0.16921,0.21141,0.18355,0.15012
#
# This query will show a better avg_frequency value.
#
set analyze_sample_percentage=25;
ANALYZE TABLE t1;
Table	Op	Msg_type	Msg_text
test.t1	analyze	status	Engine-independent statistics collected
test.t1	analyze	status	Table is already up to date
select table_name, column_name, min_value, max_value, nulls_ratio, avg_length, avg_frequency,
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.0401	0.15566,0.15590,0.15729,0.21538,0.15790,0.15787
set analyze_sample_percentage=0;
#
# Test self adjusting sampling level.
#
ANALYZE TABLE t1;
Table	Op	Msg_type	Msg_text
test.t1	analyze	status	Engine-independent statistics collected
test.t1	analyze	status	Table is already up to date
select table_name, column_name, min_value, max_value, nulls_ratio, avg_length, avg_frequency,
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	13.9812	0.15860,0.15767,0.21515,0.15573,0.15630,0.15654
#
# Test record estimation is working properly.
#
select count(*) from t1;
count(*)
229376
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	229060	
set analyze_sample_percentage=100;
ANALYZE TABLE t1;
Table	Op	Msg_type	Msg_text
test.t1	analyze	status	Engine-independent statistics collected
test.t1	analyze	status	Table is already up to date
select table_name, column_name, min_value, max_value, nulls_ratio, avg_length, avg_frequency,
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.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	
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;