下面测试了,varchar字段类型的条件下,在数据完全一致的情况下,varchar长度长和短的情况下,group by的效率
| CREATE TABLE test
(
TABLE_CATALOG
varchar(512) NOT NULL DEFAULT ”,
TABLE_SCHEMA
varchar(64) NOT NULL DEFAULT ”,
TABLE_NAME
varchar(64) NOT NULL DEFAULT ”,
TABLE_TYPE
varchar(64) NOT NULL DEFAULT ”,
ENGINE
varchar(64) DEFAULT NULL,
VERSION
bigint(21) unsigned DEFAULT NULL,
ROW_FORMAT
varchar(10) DEFAULT NULL,
TABLE_ROWS
bigint(21) unsigned DEFAULT NULL,
AVG_ROW_LENGTH
bigint(21) unsigned DEFAULT NULL,
DATA_LENGTH
bigint(21) unsigned DEFAULT NULL,
MAX_DATA_LENGTH
bigint(21) unsigned DEFAULT NULL,
INDEX_LENGTH
bigint(21) unsigned DEFAULT NULL,
DATA_FREE
bigint(21) unsigned DEFAULT NULL,
AUTO_INCREMENT
bigint(21) unsigned DEFAULT NULL,
CREATE_TIME
datetime DEFAULT NULL,
UPDATE_TIME
datetime DEFAULT NULL,
CHECK_TIME
datetime DEFAULT NULL,
TABLE_COLLATION
varchar(32) DEFAULT NULL,
CHECKSUM
bigint(21) unsigned DEFAULT NULL,
CREATE_OPTIONS
varchar(255) DEFAULT NULL,
TABLE_COMMENT
varchar(2048) NOT NULL DEFAULT ”
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
| CREATE TABLE test2
(
TABLE_CATALOG
varchar(512) NOT NULL DEFAULT ”,
TABLE_SCHEMA
varchar(64) NOT NULL DEFAULT ”,
TABLE_NAME
varchar(64) NOT NULL DEFAULT ”,
TABLE_TYPE
varchar(64) NOT NULL DEFAULT ”,
ENGINE
varchar(64) DEFAULT NULL,
VERSION
bigint(21) unsigned DEFAULT NULL,
ROW_FORMAT
varchar(10) DEFAULT NULL,
TABLE_ROWS
bigint(21) unsigned DEFAULT NULL,
AVG_ROW_LENGTH
bigint(21) unsigned DEFAULT NULL,
DATA_LENGTH
bigint(21) unsigned DEFAULT NULL,
MAX_DATA_LENGTH
bigint(21) unsigned DEFAULT NULL,
INDEX_LENGTH
bigint(21) unsigned DEFAULT NULL,
DATA_FREE
bigint(21) unsigned DEFAULT NULL,
AUTO_INCREMENT
bigint(21) unsigned DEFAULT NULL,
CREATE_TIME
datetime DEFAULT NULL,
UPDATE_TIME
datetime DEFAULT NULL,
CHECK_TIME
datetime DEFAULT NULL,
TABLE_COLLATION
varchar(32) DEFAULT NULL,
CHECKSUM
bigint(21) unsigned DEFAULT NULL,
CREATE_OPTIONS
varchar(255) DEFAULT NULL,
table_comment
varchar(40) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
select count(*) from test;
se+———-+
| count(*) |
+———-+
| 573440 |
+———-+
mysql> select count(*) from test2;
+———-+
| count(*) |
+———-+
| 573440 |
+———-+
1 row in set (0.54 sec)
mysql> select max(length(table_comment)) from test;
+—————————-+
| max(length(table_comment)) |
+—————————-+
| 39 |
+—————————-+
1 row in set (0.55 sec)
mysql> select max(length(table_comment)) from test2;
+—————————-+
| max(length(table_comment)) |
+—————————-+
| 39 |
+—————————-+
1 row in set (0.20 sec)
mysql> explain select table_comment,count(*) from test group by table_comment;
+—-+————-+——-+——+———