diff options
author | Varun Gupta <varun.gupta@mariadb.com> | 2021-02-25 16:47:21 +0530 |
---|---|---|
committer | Varun Gupta <varun.gupta@mariadb.com> | 2021-02-25 19:41:26 +0530 |
commit | 66ad14c8848cd65a6e573d3a4130c21cf6f64c9e (patch) | |
tree | 54ba58eec0007bdd31a035967976147f9200b834 | |
parent | 0f85bee5c4aa404f67f1396a9b4fa011afae16ab (diff) | |
download | mariadb-git-10.5-mdev7317.tar.gz |
review addressal10.5-mdev7317
-rw-r--r-- | mysql-test/main/ignore_indexes.result | 20 | ||||
-rw-r--r-- | mysql-test/main/ignore_indexes.test | 14 | ||||
-rw-r--r-- | sql/sql_priv.h | 4 | ||||
-rw-r--r-- | sql/sql_show.cc | 2 | ||||
-rw-r--r-- | sql/sys_vars.cc | 1 | ||||
-rw-r--r-- | sql/table.cc | 13 | ||||
-rw-r--r-- | storage/innobase/handler/handler0alter.cc | 6 |
7 files changed, 44 insertions, 16 deletions
diff --git a/mysql-test/main/ignore_indexes.result b/mysql-test/main/ignore_indexes.result index ee4af96db4f..bcbfb57ba34 100644 --- a/mysql-test/main/ignore_indexes.result +++ b/mysql-test/main/ignore_indexes.result @@ -97,7 +97,7 @@ t1 CREATE TABLE `t1` ( `b` int(11) DEFAULT NULL, `c` int(11) DEFAULT NULL, KEY `a` (`a`), - KEY `b` (`b`) IGNORE, + KEY `b` (`b`) IGNORED, KEY `c` (`c`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DROP TABLE t1; @@ -379,3 +379,21 @@ EXPLAIN SELECT b FROM t1; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 14 DROP TABLE t1; +# +# Using FORCE INDEX for an ignored index +# +CREATE TABLE t1(a INT, key k1(a)); +INSERT INTO t1 VALUES (1),(2),(3); +EXPLAIN SELECT * FROM t1 FORCE INDEX(k1); +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 index NULL k1 5 NULL 3 Using index +ALTER TABLE t1 ALTER INDEX k1 IGNORE; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) DEFAULT NULL, + KEY `k1` (`a`) IGNORED +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +EXPLAIN SELECT * FROM t1 FORCE INDEX(k1); +ERROR 42000: Key 'k1' doesn't exist in table 't1' +DROP TABLE t1; diff --git a/mysql-test/main/ignore_indexes.test b/mysql-test/main/ignore_indexes.test index 6648609e722..a061dab78ce 100644 --- a/mysql-test/main/ignore_indexes.test +++ b/mysql-test/main/ignore_indexes.test @@ -338,5 +338,19 @@ EXPLAIN SELECT * FROM t1 WHERE a = '04'; ALTER TABLE t1 ALTER INDEX b IGNORE; EXPLAIN SELECT b FROM t1; +DROP TABLE t1; + +--echo # +--echo # Using FORCE INDEX for an ignored index +--echo # + +CREATE TABLE t1(a INT, key k1(a)); +INSERT INTO t1 VALUES (1),(2),(3); + +EXPLAIN SELECT * FROM t1 FORCE INDEX(k1); +ALTER TABLE t1 ALTER INDEX k1 IGNORE; +SHOW CREATE TABLE t1; +--error ER_KEY_DOES_NOT_EXISTS +EXPLAIN SELECT * FROM t1 FORCE INDEX(k1); DROP TABLE t1; diff --git a/sql/sql_priv.h b/sql/sql_priv.h index 7b6a139bbdf..493313da90a 100644 --- a/sql/sql_priv.h +++ b/sql/sql_priv.h @@ -232,7 +232,6 @@ #define OPTIMIZER_SWITCH_USE_ROWID_FILTER (1ULL << 33) #define OPTIMIZER_SWITCH_COND_PUSHDOWN_FROM_HAVING (1ULL << 34) #define OPTIMIZER_SWITCH_NOT_NULL_RANGE_SCAN (1ULL << 35) -#define OPTIMIZER_SWITCH_IGNORE_INDEXES (1ULL << 36) #define OPTIMIZER_SWITCH_DEFAULT (OPTIMIZER_SWITCH_INDEX_MERGE | \ OPTIMIZER_SWITCH_INDEX_MERGE_UNION | \ @@ -263,8 +262,7 @@ OPTIMIZER_SWITCH_COND_PUSHDOWN_FOR_SUBQUERY | \ OPTIMIZER_SWITCH_USE_ROWID_FILTER | \ OPTIMIZER_SWITCH_COND_PUSHDOWN_FROM_HAVING | \ - OPTIMIZER_SWITCH_OPTIMIZE_JOIN_BUFFER_SIZE| \ - OPTIMIZER_SWITCH_IGNORE_INDEXES) + OPTIMIZER_SWITCH_OPTIMIZE_JOIN_BUFFER_SIZE) /* Replication uses 8 bytes to store SQL_MODE in the binary log. The day you diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 5594b98db27..74d094a5dbb 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -2481,7 +2481,7 @@ static void store_key_options(THD *thd, String *packet, TABLE *table, } if (key_info->is_ignored) - packet->append(STRING_WITH_LEN(" IGNORE")); + packet->append(STRING_WITH_LEN(" IGNORED")); } } diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index 66e7d996988..df6f9933e36 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -2714,7 +2714,6 @@ export const char *optimizer_switch_names[]= "rowid_filter", "condition_pushdown_from_having", "not_null_range_scan", - "ignore_indexes", "default", NullS }; diff --git a/sql/table.cc b/sql/table.cc index a7142db17bd..282427c61d1 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -1431,13 +1431,9 @@ void TABLE_SHARE::set_ignored_indexes() key_map TABLE_SHARE::usable_indexes(THD *thd) { - if (optimizer_flag(thd, OPTIMIZER_SWITCH_IGNORE_INDEXES)) - { - key_map usable_indexes(keys_in_use); - usable_indexes.subtract(ignored_indexes); - return usable_indexes; - } - return keys_in_use; + key_map usable_indexes(keys_in_use); + usable_indexes.subtract(ignored_indexes); + return usable_indexes; } @@ -8269,7 +8265,8 @@ bool TABLE_LIST::process_index_hints(TABLE *tbl) */ if (tbl->s->keynames.type_names == 0 || (pos= find_type(&tbl->s->keynames, hint->key_name.str, - hint->key_name.length, 1)) <= 0) + hint->key_name.length, 1)) <= 0 || + (tbl->s->key_info[pos - 1].is_ignored)) { my_error(ER_KEY_DOES_NOT_EXISTS, MYF(0), hint->key_name.str, alias.str); return 1; diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc index af61eecee89..37a23dae0a5 100644 --- a/storage/innobase/handler/handler0alter.cc +++ b/storage/innobase/handler/handler0alter.cc @@ -113,7 +113,8 @@ static const alter_table_operations INNOBASE_INPLACE_IGNORE | ALTER_DROP_CHECK_CONSTRAINT | ALTER_RENAME | ALTER_COLUMN_INDEX_LENGTH - | ALTER_CHANGE_INDEX_COMMENT; + | ALTER_CHANGE_INDEX_COMMENT + | ALTER_INDEX_IGNORABILITY; /** Operations on foreign key definitions (changing the schema only) */ static const alter_table_operations INNOBASE_FOREIGN_OPERATIONS @@ -1996,7 +1997,8 @@ ha_innobase::check_if_supported_inplace_alter( & ~(INNOBASE_INPLACE_IGNORE | INNOBASE_ALTER_INSTANT | INNOBASE_ALTER_NOREBUILD - | INNOBASE_ALTER_REBUILD)) { + | INNOBASE_ALTER_REBUILD + | ALTER_INDEX_IGNORABILITY)) { if (ha_alter_info->handler_flags & ALTER_STORED_COLUMN_TYPE) { |