Документация MySQL не очень ясна по этому поводу. Я хочу добавить индекс к существующей таблице. Таблица представляет собой таблицу пользователей с идентификатором входа и паролем, и я хочу создать индекс для этого, чтобы оптимизировать вход в систему.
Вот как я думал, что попробую:
mysql> ALTER TABLE `users` ADD INDEX(`name`,`password`);
Это создало:
mysql> show index from karmerd.users;
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| users | 0 | PRIMARY | 1 | id | A | 2 | NULL | NULL | | BTREE | |
| users | 1 | name | 1 | name | A | 2 | NULL | NULL | | BTREE | |
| users | 1 | name | 2 | password | A | 2 | NULL | NULL | YES | BTREE | |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
Получилось ли это того, что я пытался сделать? (Оптимизировать вход в систему?) Раньше у меня был только первичный ключ в поле с именем «id».
Спасибо за помощь с форматированием, не знал, как это сделать.
Любая строка, начинающаяся с четырех пробелов, имеет кодовое форматирование. Или вы можете выделить кучу текста и щелкнуть значок «010101», и он сделает это за вас.






Да, удалось создать индекс. Индекс называется «name» (если вы не дадите индексу имя, он попытается использовать первый столбец, который вы укажете в индексе). Индекс состоит из двух столбцов: name в позиции 1 и password в позиции 2.
Что касается того, оптимизирует ли это ведение журнала, это зависит от того, как ваши запросы могут или не могут использовать индекс. Вы также должны узнать, как анализировать запросы с помощью EXPLAIN.
Вам также следует узнать больше о хранении паролей.
Вот хороший блог на тему: "Вероятно, вы неправильно храните пароли"
Мой запрос на вход в систему в основном: ВЫБРАТЬ id ИЗ users, ГДЕ name = "имя" И password = SHA1 ("пароль")
На самом деле похоже, что используется ключ: mysql> объяснение выберите id из users, где name = "имя" и password = SHA1 ("пароль"); имеет "имя" в ключевом столбце.
Это «объяснение» действительно помогло, я не знал об этом, спасибо!
Если имена пользователей в вашем приложении не уникальны, я не думаю, что имеет смысл индексировать "пароль"; индекс будет больше, а вставки будут медленнее без добавленной стоимости.
RE: «Документация MySQL не очень ясна по этому поводу». - Это касается очень многих вещей. :)