Pop*_*orn 4 mysql indexing database-administration unique-index
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)
Run Code Online (Sandbox Code Playgroud)
试图找出是否是安全的删除键category_type_2和category_type_3。看来它们是与完全相同的索引category_type。这是一个旧表,我不知道是谁在很久以前创建的。有人最终会创建似乎重复的这三个键是否有任何正当理由?
具有两个相同的索引会浪费磁盘空间,并且会减慢速度INSERTs(有一点)。没有好处。
您真的看不到它们是否与重复DESCRIBE TABLE。相反,请执行SHOW CREATE TABLE。注意UNIQUE/ not,前缀/ not,regular / FULLTEXT,手动创建/由FOREIGN KEY等等创建的。
一旦确定它们相同(名称除外),就放一。在其他情况下,索引也可能会被删除。假设您具有以下三个索引:
INDEX(a,b) -- keep this
INDEX(a) -- unnecessary
INDEX(b) -- keep
Run Code Online (Sandbox Code Playgroud)
或这对:
UNIQUE(a) -- keep; same as INDEX(a), plus a uniqueness check
INDEX(a) -- drop
Run Code Online (Sandbox Code Playgroud)
更微妙的是,考虑这对:
INDEX(a,b) -- keep; provides composite index
UNIQUE(a) -- keep; provides uniqueness check
Run Code Online (Sandbox Code Playgroud)
(还有更多组合。)