Проблема в том, что мне как-то удалось получить два индекса с одинаковыми именами в таблице MySQL? - PullRequest
0 голосов
/ 12 июля 2010

Каким-то образом мне удалось получить два индекса с именем user_id, как показано ниже.Должен ли я удалить, переименовать и восстановить один из них, или это не проблема?

SHOW INDEXES FROM core_item;

+-----------+------------+-----------+--------------+-----------------+-----------+-------------+----------+--------+------+------------+---------+
| Table     | Non_unique | Key_name  | Seq_in_index | Column_name     | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+-----------+------------+-----------+--------------+-----------------+-----------+-------------+----------+--------+------+------------+---------+
| core_item |          0 | PRIMARY   |            1 | id              | A         |      593642 |     NULL | NULL   |      | BTREE      |         | 
| core_item |          0 | user_id   |            1 | user_id         | A         |       11416 |     NULL | NULL   |      | BTREE      |         | 
| core_item |          0 | user_id   |            2 | product_id      | A         |      593642 |     NULL | NULL   |      | BTREE      |         |
+-----------+------------+-----------+--------------+-----------------+-----------+-------------+----------+--------+------+------------+---------+

Ответы [ 2 ]

7 голосов
/ 12 июля 2010

Это один составной индекс, охватывающий 2 столбца.

Я думаю, что вывод SHOW CREATE TABLE core_item легче понять.

1 голос
/ 12 июля 2010

У вас есть только один индекс, но он относится к двум полям - это составной ключ для user_id и product_id. Это будет создано так:

ALTER TABLE core_item ADD INDEX `user_id` (`user_id`, `product_id`);

Возможно, стоит переименовать его в другое, чтобы избежать путаницы в будущем, но только в том случае, если переименование не повлияет на существующие запросы, напрямую указывающие индексы.

...