1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219
|
drop table if exists t1,t2,t3,t4;
create table t1 (a int not null,b int not null,c int not null, primary key(a,b))
partition by list (b*a)
(partition x1 values in (1),
partition x2 values in (3, 11, 5, 7),
partition x3 values in (16, 8, 5+19, 70-43));
select * from information_schema.partitions where table_schema="test"
and table_name="t1";
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
def test t1 x1 NULL 1 NULL LIST NULL (`b` * `a`) NULL 1 0 0 16384 # 0 0 # # NULL NULL default NULL
def test t1 x2 NULL 2 NULL LIST NULL (`b` * `a`) NULL 3,11,5,7 0 0 16384 # 0 0 # # NULL NULL default NULL
def test t1 x3 NULL 3 NULL LIST NULL (`b` * `a`) NULL 16,8,24,27 0 0 16384 # 0 0 # # NULL NULL default NULL
create table t2 (a int not null,b int not null,c int not null, primary key(a,b))
partition by range (a)
partitions 3
(partition x1 values less than (5),
partition x2 values less than (10),
partition x3 values less than maxvalue);
select * from information_schema.partitions where table_schema="test"
and table_name="t2";
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
def test t2 x1 NULL 1 NULL RANGE NULL `a` NULL 5 0 0 16384 # 0 0 # # NULL NULL default NULL
def test t2 x2 NULL 2 NULL RANGE NULL `a` NULL 10 0 0 16384 # 0 0 # # NULL NULL default NULL
def test t2 x3 NULL 3 NULL RANGE NULL `a` NULL MAXVALUE 0 0 16384 # 0 0 # # NULL NULL default NULL
create table t3 (f1 date)
partition by hash(month(f1))
partitions 3;
select * from information_schema.partitions where table_schema="test"
and table_name="t3";
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
def test t3 p0 NULL 1 NULL HASH NULL month(`f1`) NULL NULL 0 0 16384 # 0 0 # # NULL NULL default NULL
def test t3 p1 NULL 2 NULL HASH NULL month(`f1`) NULL NULL 0 0 16384 # 0 0 # # NULL NULL default NULL
def test t3 p2 NULL 3 NULL HASH NULL month(`f1`) NULL NULL 0 0 16384 # 0 0 # # NULL NULL default NULL
create table t4 (f1 date, f2 int)
partition by key(f1,f2)
partitions 3;
select * from information_schema.partitions where table_schema="test"
and table_name="t4";
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
def test t4 p0 NULL 1 NULL KEY NULL `f1`,`f2` NULL NULL 0 0 16384 # 0 0 # # NULL NULL default NULL
def test t4 p1 NULL 2 NULL KEY NULL `f1`,`f2` NULL NULL 0 0 16384 # 0 0 # # NULL NULL default NULL
def test t4 p2 NULL 3 NULL KEY NULL `f1`,`f2` NULL NULL 0 0 16384 # 0 0 # # NULL NULL default NULL
drop table t1,t2,t3,t4;
create table t1 (a int not null,b int not null,c int not null,primary key (a,b))
partition by range (a)
subpartition by hash (a+b)
( partition x1 values less than (1)
( subpartition x11,
subpartition x12),
partition x2 values less than (5)
( subpartition x21,
subpartition x22)
);
create table t2 (a int not null,b int not null,c int not null,primary key (a,b))
partition by range (a)
subpartition by key (a)
( partition x1 values less than (1)
( subpartition x11,
subpartition x12),
partition x2 values less than (5)
( subpartition x21,
subpartition x22)
);
select * from information_schema.partitions where table_schema="test";
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
def test t1 x1 x11 1 1 RANGE HASH `a` (`a` + `b`) 1 0 0 16384 # 0 0 # # NULL NULL default NULL
def test t1 x1 x12 1 2 RANGE HASH `a` (`a` + `b`) 1 0 0 16384 # 0 0 # # NULL NULL default NULL
def test t1 x2 x21 2 1 RANGE HASH `a` (`a` + `b`) 5 0 0 16384 # 0 0 # # NULL NULL default NULL
def test t1 x2 x22 2 2 RANGE HASH `a` (`a` + `b`) 5 0 0 16384 # 0 0 # # NULL NULL default NULL
def test t2 x1 x11 1 1 RANGE KEY `a` `a` 1 0 0 16384 # 0 0 # # NULL NULL default NULL
def test t2 x1 x12 1 2 RANGE KEY `a` `a` 1 0 0 16384 # 0 0 # # NULL NULL default NULL
def test t2 x2 x21 2 1 RANGE KEY `a` `a` 5 0 0 16384 # 0 0 # # NULL NULL default NULL
def test t2 x2 x22 2 2 RANGE KEY `a` `a` 5 0 0 16384 # 0 0 # # NULL NULL default NULL
drop table t1,t2;
create table t1 (
a int not null,
b int not null,
c int not null,
primary key (a,b))
partition by range (a)
subpartition by hash (a+b)
( partition x1 values less than (1)
( subpartition x11 nodegroup 0,
subpartition x12 nodegroup 1),
partition x2 values less than (5)
( subpartition x21 nodegroup 0,
subpartition x22 nodegroup 1),
partition x3 values less than (10)
( subpartition x31 max_rows=50,
subpartition x32 nodegroup 1)
);
select * from information_schema.partitions where table_schema="test";
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
def test t1 x1 x11 1 1 RANGE HASH `a` (`a` + `b`) 1 0 0 16384 # 0 0 # # NULL NULL 0 NULL
def test t1 x1 x12 1 2 RANGE HASH `a` (`a` + `b`) 1 0 0 16384 # 0 0 # # NULL NULL 1 NULL
def test t1 x2 x21 2 1 RANGE HASH `a` (`a` + `b`) 5 0 0 16384 # 0 0 # # NULL NULL 0 NULL
def test t1 x2 x22 2 2 RANGE HASH `a` (`a` + `b`) 5 0 0 16384 # 0 0 # # NULL NULL 1 NULL
def test t1 x3 x31 3 1 RANGE HASH `a` (`a` + `b`) 10 0 0 16384 # 0 0 # # NULL NULL default NULL
def test t1 x3 x32 3 2 RANGE HASH `a` (`a` + `b`) 10 0 0 16384 # 0 0 # # NULL NULL 1 NULL
show tables;
Tables_in_test
t1
drop table t1;
create table t1(f1 int, f2 int);
select * from information_schema.partitions where table_schema="test";
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
def test t1 NULL NULL NULL NULL NULL NULL NULL NULL NULL 0 0 16384 # 0 0 # # NULL NULL NULL
drop table t1;
create table t1 (f1 date)
partition by linear hash(month(f1))
partitions 3;
select * from information_schema.partitions where table_schema="test"
and table_name="t1";
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PARTITION_NAME SUBPARTITION_NAME PARTITION_ORDINAL_POSITION SUBPARTITION_ORDINAL_POSITION PARTITION_METHOD SUBPARTITION_METHOD PARTITION_EXPRESSION SUBPARTITION_EXPRESSION PARTITION_DESCRIPTION TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH MAX_DATA_LENGTH INDEX_LENGTH DATA_FREE CREATE_TIME UPDATE_TIME CHECK_TIME CHECKSUM PARTITION_COMMENT NODEGROUP TABLESPACE_NAME
def test t1 p0 NULL 1 NULL LINEAR HASH NULL month(`f1`) NULL NULL 0 0 16384 # 0 0 # # NULL NULL default NULL
def test t1 p1 NULL 2 NULL LINEAR HASH NULL month(`f1`) NULL NULL 0 0 16384 # 0 0 # # NULL NULL default NULL
def test t1 p2 NULL 3 NULL LINEAR HASH NULL month(`f1`) NULL NULL 0 0 16384 # 0 0 # # NULL NULL default NULL
drop table t1;
create table t1 (a int)
PARTITION BY RANGE (a)
SUBPARTITION BY LINEAR HASH (a)
(PARTITION p0 VALUES LESS THAN (10));
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
/*!50100 PARTITION BY RANGE (`a`)
SUBPARTITION BY LINEAR HASH (`a`)
(PARTITION p0 VALUES LESS THAN (10) ENGINE = InnoDB) */
select SUBPARTITION_METHOD FROM information_schema.partitions WHERE
table_schema="test" AND table_name="t1";
SUBPARTITION_METHOD
LINEAR HASH
drop table t1;
create table t1 (a int)
PARTITION BY LIST (a)
(PARTITION p0 VALUES IN
(10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53));
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
`a` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
/*!50100 PARTITION BY LIST (`a`)
(PARTITION p0 VALUES IN (10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53) ENGINE = InnoDB) */
SELECT PARTITION_DESCRIPTION FROM information_schema.partitions WHERE
table_schema = "test" AND table_name = "t1";
PARTITION_DESCRIPTION
10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53
drop table t1;
drop table if exists t1;
create table t1 (f1 int key) partition by key(f1) partitions 2;
select create_options from information_schema.tables where table_schema="test";
CREATE_OPTIONS
partitioned
drop table t1;
# Bug #29870919 INFORMATION SCHEMA STATS EXPIRY RESULTS IN BAD
# STATS FOR PARTITIONED TABLES
#
# Without the fix the cardinality values by SHOW INDEXES is invalid.
#
CREATE TABLE t1
(f1 INT NOT NULL AUTO_INCREMENT,
f2 INT NOT NULL,
PRIMARY KEY (f1,f2)) ENGINE=InnoDB
PARTITION BY RANGE (f2)
(PARTITION p0 VALUES LESS THAN (100),
PARTITION p1 VALUES LESS THAN (200),
PARTITION p2 VALUES LESS THAN (300),
PARTITION p3 VALUES LESS THAN (MAXVALUE));
INSERT INTO t1 VALUES (NULL, 1);
INSERT INTO t1 VALUES (NULL, 2);
INSERT INTO t1 SELECT NULL, 3
FROM t1 a, t1 b, t1 c, t1 d, t1 e, t1 f, t1 g;
# This SELECT caches the cardinality, as there is non cached yet.
# We expect a non-zero cardinality value, as SE cannot provide
# latest value, without the call to ANALYZE TABLE.
SELECT TABLE_NAME, NON_UNIQUE, INDEX_SCHEMA INDEX_NAME, SEQ_IN_INDEX,
COLUMN_NAME, COLLATION, IF(CARDINALITY > 0, "non-zero", "zero"),
SUB_PART PACKED, NULLABLE, INDEX_TYPE, COMMENT, INDEX_COMMENT,
IS_VISIBLE, EXPRESSION
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA='test' AND TABLE_NAME='t1';
TABLE_NAME NON_UNIQUE INDEX_NAME SEQ_IN_INDEX COLUMN_NAME COLLATION IF(CARDINALITY > 0, "non-zero", "zero") PACKED NULLABLE INDEX_TYPE COMMENT INDEX_COMMENT IS_VISIBLE EXPRESSION
t1 0 test 1 f1 A non-zero NULL BTREE YES NULL
t1 0 test 2 f2 A non-zero NULL BTREE YES NULL
# We do not account INSERTed rows into cardinality because
# the cached value is not expired yet.
# We expect a non-zero cardinality value, as SE cannot provide
# latest value, without the call to ANALYZE TABLE.
INSERT INTO t1 SELECT NULL, 4 FROM t1;
SELECT TABLE_NAME, NON_UNIQUE, INDEX_SCHEMA INDEX_NAME, SEQ_IN_INDEX,
COLUMN_NAME, COLLATION, IF(CARDINALITY > 0, "non-zero", "zero"),
SUB_PART PACKED, NULLABLE, INDEX_TYPE, COMMENT, INDEX_COMMENT,
IS_VISIBLE, EXPRESSION
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA='test' AND TABLE_NAME='t1';
TABLE_NAME NON_UNIQUE INDEX_NAME SEQ_IN_INDEX COLUMN_NAME COLLATION IF(CARDINALITY > 0, "non-zero", "zero") PACKED NULLABLE INDEX_TYPE COMMENT INDEX_COMMENT IS_VISIBLE EXPRESSION
t1 0 test 1 f1 A non-zero NULL BTREE YES NULL
t1 0 test 2 f2 A non-zero NULL BTREE YES NULL
# We force update cache by calling ANALYZE TABLE.
ANALYZE TABLE t1;
Table Op Msg_type Msg_text
test.t1 analyze status OK
SHOW INDEXES IN t1;
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment Visible Expression
t1 0 PRIMARY 1 f1 A 260 NULL NULL BTREE YES NULL
t1 0 PRIMARY 2 f2 A 260 NULL NULL BTREE YES NULL
# We do see INSERTed rows accounted into cardinality
# because we ignore cache with expiry seconds set to 0.
SET session information_schema_stats_expiry = 0;
INSERT INTO t1 SELECT NULL, 4 FROM t1;
SHOW INDEXES IN t1;
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment Visible Expression
t1 0 PRIMARY 1 f1 A 520 NULL NULL BTREE YES NULL
t1 0 PRIMARY 2 f2 A 520 NULL NULL BTREE YES NULL
DROP TABLE t1;
|