drop table if exists t1,t2; set @save_use_stat_tables=@@use_stat_tables; 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=default; 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 x 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 y 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 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 x 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 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 idx4 3 1.1304 test t1 idx4 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 idx1 2 1.6875 test t1 idx1 1 6.4000 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 idx4 3 1.1304 test t1 idx2 1 7.0000 test t1 idx2 2 2.3846 test t1 idx3 1 8.5000 test t1 idx4 2 1.6875 test t1 idx4 1 6.2000 test t1 idx1 2 1.6875 test t1 idx1 1 6.4000 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 idx2 1 7.0000 test t1 idx1 2 NULL test t1 idx1 1 NULL test t1 idx3 1 8.5000 test t1 idx2 2 2.3846 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 idx2 1 7.0000 test t1 idx1 2 1.6875 test t1 idx1 1 6.4000 test t1 idx3 1 8.5000 test t1 idx2 2 2.3846 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 idx4 1 6.2000 test t1 idx4 2 1.6875 test t1 idx3 1 8.5000 test t1 idx2 2 2.3846 test t1 idx2 1 7.0000 test t1 idx1 2 1.6875 test t1 idx1 1 6.4000 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 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 test t1 b 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 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 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 test t1 PRIMARY 1 1.0000 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 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 t1 b 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 t1 PRIMARY 1 1.0000 test t1 idx3 1 8.5000 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 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; 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; 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 idx3 1 8.5000 test t2 idx2 1 7.0000 test t2 idx2 2 2.3846 test t2 idx2 3 1.0000 test t2 idx4 1 6.2000 test t2 idx4 2 2.2308 test t2 idx4 3 1.0000 test t2 idx3 2 1.0000 test t2 PRIMARY 1 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 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 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 idx2 1 7.0000 test t2 idx3 1 8.5000 test t1 idx3 1 8.5000 test t1 PRIMARY 1 1.0000 test t2 idx2 1 7.0000 test t2 idx2 2 2.3846 test t2 idx2 3 1.0000 test t2 idx4 1 6.2000 test t2 idx4 2 2.2308 test t2 idx4 3 1.0000 test t2 idx3 2 1.0000 test t2 PRIMARY 1 1.0000 test t1 idx2 2 2.3846 test t1 idx1 1 NULL test t1 idx1 2 NULL 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 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 idx3 1 8.5000 test t1 idx2 1 7.0000 test t1 idx2 2 2.3846 test t1 idx1 1 NULL test t1 idx1 2 NULL 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 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 mysql.column_stats; 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 WORLD COUNTRY SurfaceArea 0.40 17075400.00 0.0000 4.0000 1.0042 WORLD COUNTRY Population 0 1277558000 0.0000 4.0000 1.0575 WORLD COUNTRY Capital 1 4074 0.0293 4.0000 1.0000 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 Country ABW ZWE 0.0000 3.0000 17.5819 WORLD CITY Population 42 10500000 0.0000 4.0000 1.0467 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 COUNTRY PRIMARY 1 1.0000 WORLD COUNTRY Name 1 1.0000 WORLD CITY PRIMARY 1 1.0000 WORLD CITY Population 1 1.0467 WORLD CITY Country 1 17.5819 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 COUNTRY 239 WORLD CITY 4079 WORLD COUNTRYLANGUAGE 984 WORLD_INNODB COUNTRY 239 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 mysql.column_stats; 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 WORLD COUNTRY SurfaceArea 0.40 17075400.00 0.0000 4.0000 1.0042 WORLD COUNTRY Population 0 1277558000 0.0000 4.0000 1.0575 WORLD COUNTRY Capital 1 4074 0.0293 4.0000 1.0000 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 Country ABW ZWE 0.0000 3.0000 17.5819 WORLD CITY Population 42 10500000 0.0000 4.0000 1.0467 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 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 SurfaceArea 0.40 17075400.00 0.0000 4.0000 1.0042 WORLD_INNODB COUNTRY Population 0 1277558000 0.0000 4.0000 1.0575 WORLD_INNODB COUNTRY Capital 1 4074 0.0293 4.0000 1.0000 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 Country ABW ZWE 0.0000 3.0000 17.5819 WORLD_INNODB CITY Population 42 10500000 0.0000 4.0000 1.0467 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 COUNTRY PRIMARY 1 1.0000 WORLD COUNTRY Name 1 1.0000 WORLD CITY PRIMARY 1 1.0000 WORLD CITY Population 1 1.0467 WORLD CITY Country 1 17.5819 WORLD COUNTRYLANGUAGE PRIMARY 1 4.2232 WORLD COUNTRYLANGUAGE PRIMARY 2 1.0000 WORLD COUNTRYLANGUAGE Percentage 1 2.7640 WORLD_INNODB COUNTRY PRIMARY 1 1.0000 WORLD_INNODB COUNTRY Name 1 1.0000 WORLD_INNODB CITY PRIMARY 1 1.0000 WORLD_INNODB CITY Population 1 1.0467 WORLD_INNODB CITY Country 1 17.5819 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=default; set histogram_size=default; 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 COUNTRY 239 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 mysql.column_stats; UPPER(db_name) UPPER(table_name) column_name min_value max_value nulls_ratio avg_length avg_frequency 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 SurfaceArea 0.40 17075400.00 0.0000 4.0000 1.0042 WORLD_INNODB COUNTRY Population 0 1277558000 0.0000 4.0000 1.0575 WORLD_INNODB COUNTRY Capital 1 4074 0.0293 4.0000 1.0000 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 Country ABW ZWE 0.0000 3.0000 17.5819 WORLD_INNODB CITY Population 42 10500000 0.0000 4.0000 1.0467 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 COUNTRY PRIMARY 1 1.0000 WORLD_INNODB COUNTRY Name 1 1.0000 WORLD_INNODB CITY PRIMARY 1 1.0000 WORLD_INNODB CITY Population 1 1.0467 WORLD_INNODB CITY Country 1 17.5819 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=default; set histogram_type=default; 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=default; 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; # # MDEV-19334: bool is_eits_usable(Field*): Assertion `field->table->stats_is_read' failed. # create temporary table t1(a int); insert into t1 values (1),(2),(3); set use_stat_tables=preferably; set @optimizer_use_condition_selectivity= @@optimizer_use_condition_selectivity; set optimizer_use_condition_selectivity=4; select * from t1 where a >= 2; a 2 3 drop table t1; set @@optimizer_use_condition_selectivity= @save_optimizer_use_condition_selectivity; set use_stat_tables=@save_use_stat_tables;