describe etc_category_metadata;
+---------------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+---------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user_id | bigint(20) | NO | | NULL | |
| time_updated | int(11) | YES | | NULL | |
| category_type | int(11) | YES | MUL | NULL | |
| status_keywords | mediumblob | YES | | NULL | |
| page_keywords | mediumblob | YES | | NULL | |
| profession_keywords | mediumblob | YES | | NULL | |
| adgroup_ids | mediumblob | YES | | NULL | |
| prod | tinyint(1) | YES | | 0 | |
| version | int(11) | YES | | 1 | |
| status | int(11) | YES | | 0 | |
| dep_category_ids | mediumblob | YES | | NULL | |
| custom_param | mediumblob | YES | | NULL | |
| queue_priority | int(11) | YES | | 1 | |
| auto_requeue_num | int(11) | YES | | 0 | |
| cloned_version | int(11) | YES | | 0 | |
| custom_query | varchar(1000) | YES | | NULL | |
| description | varchar(1000) | YES | | NULL | |
| error_message | mediumblob | YES | | NULL | |
| time_last_completed | int(11) | YES | | NULL | |
+---------------------+---------------+------+-----+---------+----------------+
21 rows in set (0.40 sec)
show index from etc_category_metadata;
+-----------------------+------------+-----------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-----------------------+------------+-----------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| etc_category_metadata | 0 | PRIMARY | 1 | id | A | 12613 | NULL | NULL | | BTREE | | |
| etc_category_metadata | 0 | category_type | 1 | category_type | A | 12613 | NULL | NULL | YES | BTREE | | |
| etc_category_metadata | 0 | category_type | 2 | version | A | 12613 | NULL | NULL | YES | BTREE | | |
| etc_category_metadata | 0 | category_type_2 | 1 | category_type | A | 12613 | NULL | NULL | YES | BTREE | | |
| etc_category_metadata | 0 | category_type_2 | 2 | version | A | 12613 | NULL | NULL | YES | BTREE | | |
| etc_category_metadata | 0 | category_type_3 | 1 | category_type | A | 12613 | NULL | NULL | YES | BTREE | | |
| etc_category_metadata | 0 | category_type_3 | 2 | version | A | 12613 | NULL | NULL | YES | BTREE | | |
+-----------------------+------------+-----------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
7 rows in set (0.07 sec)
试图找出删除密钥category_type_2
和category_type_3
是否安全。看起来它们和category_type
是完全一样的指标。这是一张我不知道是谁很久以前创建的遗留表。有什么合理的理由让某人最终创造出这三个看似重复的键吗?
使用两个相同的索引会浪费磁盘空间,并且会减慢INSERTs
(一点)的速度。没有任何好处。
你真的看不出它们是不是DESCRIBE TABLE
的复制品。相反,执行SHOW CREATE TABLE
。注意UNIQUE
/not,前缀/not,常规/FULLTEXT
,手动创建/由FOREIGN KEY
创建等。
一旦你确定它们是相同的(除了名字),就删除一个。在其他情况下,也可以删除索引。假设您有以下3个索引:
INDEX(a,b) -- keep this
INDEX(a) -- unnecessary
INDEX(b) -- keep
或者这对:
UNIQUE(a) -- keep; same as INDEX(a), plus a uniqueness check
INDEX(a) -- drop
更微妙,考虑这对:
INDEX(a,b) -- keep; provides composite index
UNIQUE(a) -- keep; provides uniqueness check
(还有更多的组合)
是的,你在同一列上有重复的索引,所以mysql只是添加一个数字,如果你没有给索引一个名称。在我看来,mysql甚至不应该允许重复索引。删除它们是安全的
DROP INDEX category_type_2 ON etc_category_metadata
在相同的列上以相同的顺序设置多个索引是没有什么好的理由的。在当前MySQL数据库上创建索引语句仍然会成功(出于向后兼容性的原因),但会发出警告:
在表'db.table_name'上定义的重复索引'index_name'。这是不推荐的,在未来的版本中将不允许。