Bug #103146 | compound indexes size greater than 767 bytes allowed for redundant innodb tables | ||
---|---|---|---|
Submitted: | 30 Mar 2021 5:56 | Modified: | 30 Mar 2021 6:51 |
Reporter: | Chelluru Vidyadhar | Email Updates: | |
Status: | Verified | Impact on me: | |
Category: | MySQL Server: Documentation | Severity: | S3 (Non-critical) |
Version: | 5.7.33 | OS: | Any |
Assigned to: | CPU Architecture: | Any |
[30 Mar 2021 5:56]
Chelluru Vidyadhar
[30 Mar 2021 6:04]
Chelluru Vidyadhar
There are some typo in provided examples. Below are the updated examples. ==== set global innodb_default_row_format='redundant'; drop database if exists test; create database test; use test; CREATE TABLE `test123` ( `id` int unsigned NOT NULL AUTO_INCREMENT, `b` varchar(255) DEFAULT NULL, `c` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; insert into test123 (b,c) select repeat('b',255), repeat('c',255); create index idx123 on test123(b); ## <- This will fail as expected because the index length will be 4 (utf8mb4) * 255 (column length) bytes CREATE TABLE `test456` ( `id` int unsigned NOT NULL AUTO_INCREMENT, `b` varchar(255) DEFAULT NULL, `c` varchar(255) DEFAULT NULL, `d` varchar(255) DEFAULT NULL, `e` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; insert into test456 (b,c,d,e) select repeat('b',255), repeat('c',255), repeat('d',255), repeat('e',255); create index idx123 on test456(b,c,d,e); ## <- This will succeed even the total compound index length is greater than 767 bytes and all indvidual columns length inside index less than 767 bytes. CREATE TABLE `test789` ( `id` int unsigned NOT NULL AUTO_INCREMENT, `b` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '', `c` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 insert into test789 (b,c) select repeat('b',255), repeat('c',255); create index idx123 on test789(b,c); ## <- This command will fail because one of the column (b) has total length greater than 767 bytes. ERROR 1709 (HY000): Index column size too large. The maximum column size is 767 bytes. ====
[30 Mar 2021 6:51]
MySQL Verification Team
Hello Chelluru, Thank you for the report and feedback. regards, Umesh