Details
-
Task
-
Status: Closed (View Workflow)
-
Critical
-
Resolution: Fixed
Description
SYNTAX
An index can be ignored in the following way:
1) Adding IGNORED to the key specification in CREATE TABLE
Example
CREATE TABLE t1(a INT, key key1(a) IGNORE); |
2) Adding IGNORED to the key specification in CREATE INDEX
Example
CREATE INDEX key1 on t1 (a) IGNORE; |
3) Adding IGNORED to the key in the ALTER statement
New syntax: ALTER TABLE table_name ALTER INDEX key_name ignorability
ignorability:
IGNORE_SYM |
NOT IGNORE_SYM |
Example:
ALTER TABLE t1 ADD INDEX key1 IGNORE; |
Specifications
- Store the information about the ignorability of the index in the FRM.
- A primary index cannot be made IGNORABLE.
- A non-nullable unique key that is promoted to a primary key cannot be made IGNORABLE.
- CHANGES in the output of SHOW CREATE TABLE and SHOW INDEXES|KEYS to show if the index is IGNORED or not.
- An ALTER INDEX operation should use the INPLACE algorithm by default.
Attachments
Issue Links
- causes
-
MDEV-25075 Ignorable index makes the resulting CREATE TABLE invalid
-
- Closed
-
- includes
-
MDEV-22199 Add VISIBLE attribute for indexes in CREATE TABLE
-
- Closed
-
- relates to
-
MDEV-33777 Spider: ERROR 12710 (HY000): Invalid information from remote table when using MariaDB 10.5 local and MariaDB 10.6 remote
-
- Closed
-
Here's the syntax I've implemented in the parser:
\W
show warnings;
mysql> \W
Show warnings enabled.
mysql> drop table if exists t1;
Query OK, 0 rows affected, 2 warnings (0.00 sec)
Note (Code 1051): Unknown table 'test.t1'
mysql> create table t1 (id int, col1 char(3), key idx_id (id) visible) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Query OK, 0 rows affected (0.20 sec)
mysql> create index idx_col1 on t1 (col1) visible;
Query OK, 0 rows affected (0.07 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show create table t1;
| Table | Create Table |
| t1 | CREATE TABLE `t1` (
`id` int(11) DEFAULT NULL,
`col1` char(3) DEFAULT NULL,
KEY `idx_id` (`id`),
KEY `idx_col1` (`col1`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
1 row in set (0.00 sec)
mysql> insert into t1 (id, col1) values (1,'abc'), (2, 'def');
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> alter table t1 change index idx_col1 invisible;
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> alter table t1 change index idx_col1 visible;
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> alter table t1 change index idx_id invisible, change index idx_col1 invisible;
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> select id, col1 from t1 order by id;
+------+------+
| id | col1 |
+------+------+
| 1 | abc |
| 2 | def |
+------+------+
2 rows in set (0.00 sec)
mysql> drop table if exists t1;
Query OK, 0 rows affected, 1 warning (0.03 sec)