" А если вы точно знаете, какие комбинации ключей будут использоваться, то они станут наилучшими кандидатами для построения индексов, состоящих из нескольких столбцов."
Можно пожалуйста вот это объяснить более просто?)
Я правильно понял, что был создан один уникальный индекс для всех записей "Иван"? Даже если это были бы разные Иваны, но одинаково записаны в этом столбце?
Уже прочитал в чём разница между обычным и уникальным индексом. В случае уникального индекса, при поиске данных, MySQL остановится после обнаружения первого соответствия. В случае обычного индекса будет обязательно проведена еще одна проверка (следующего значения в индексе).
Уникальные индексы есть смысл задавать на email или логин, если они уникальные в таблице. Я верно понял?
ПОдскажите, пожалуйста, решение проблемы. Был создан индекс name_idx, но при выполнении запроса EXPLAIN SELECT * FROM users WHERE name="Ваня" индекс не используется. Прикрепляю скрин.
А почему "rows - число записей, которые пришлось проверить прежде чем отдать результат" в случае с индексом у нас при 9 записях (у меня 12) значение rows 3 в вашем примере и 2 в моем случае (по числу строк с искомым значением), если бин. поиск должен обходить [log(2)отN]строк, т.е. в худшем случае 4 в примере, да и 4 - в моем случае. Повезло?)
То есть составной индекс это по-сути 2 индекса соединенных между собой. И если нам не требуется уникальная пара значений в нескольких столбцах, то смысла в них нет, ведь WHERE делает тоже самое, сначала сужает выборку по первому условию, затем по второму и т.д.
Правильно?
" А если вы точно знаете, какие комбинации ключей будут использоваться, то они станут наилучшими кандидатами для построения индексов, состоящих из нескольких столбцов."
Можно пожалуйста вот это объяснить более просто?)
Если вы знаете, что в запросах будут часто использоваться выборки по столбцам "рубрика" и "цена", значит индекс следует создавать на эти два столбца.
Благодарю
К примеру, если бы в табличке users было поле gender, хранящее пол пользователя, а на сайте была бы какая-то поиск, формирующий запрос:
Спасибо, поправил!
Я правильно понял, что был создан один уникальный индекс для всех записей "Иван"? Даже если это были бы разные Иваны, но одинаково записаны в этом столбце?
Нет, он не уникальный. Напишите запрос для создания уникального индекса в качестве дополнительной домашки.
Уже прочитал в чём разница между обычным и уникальным индексом. В случае уникального индекса, при поиске данных, MySQL остановится после обнаружения первого соответствия. В случае обычного индекса будет обязательно проведена еще одна проверка (следующего значения в индексе).
Уникальные индексы есть смысл задавать на email или логин, если они уникальные в таблице. Я верно понял?
Абсолютли)
ПОдскажите, пожалуйста, решение проблемы. Был создан индекс name_idx, но при выполнении запроса EXPLAIN SELECT * FROM users WHERE name="Ваня" индекс не используется. Прикрепляю скрин.
Каким запросом создавали индекс?
Добавьте в таблицу еще несколько пользователей с именем != Иван/Ваня
Спасибо, помогло. А почему помогло добавление новых записей с другими именами?
https://ru.stackoverflow.com/questions/582095/%D0%9A%D0%BE%D0%B3%D0%B4%D0%B0-mysql-%D0%BD%D0%B5-%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D0%B5%D1%82-%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%8B
Там ответ под вопросом в комментариях
Спасибо.
У вас опечатка в тексте.
Спасибо, исправил
А почему "rows - число записей, которые пришлось проверить прежде чем отдать результат" в случае с индексом у нас при 9 записях (у меня 12) значение rows 3 в вашем примере и 2 в моем случае (по числу строк с искомым значением), если бин. поиск должен обходить [log(2)отN]строк, т.е. в худшем случае 4 в примере, да и 4 - в моем случае. Повезло?)
Хороший вопрос, на который у меня нет ответа) Предлагаю погуглить как это работает и что именно это за число.
У меня почему то EXPLAIN SELECT * FROM users WHERE name="Иван";
до создания индекса выдаёт значение row = 8, а не 9, хотя юзеров так же 9...?
Гуглить пробовали почему так?)
Гугл не помог. Помогло удаление таблиц с неизвестной ошибкой (users, articles, categories) и создание их заново.
То есть составной индекс это по-сути 2 индекса соединенных между собой. И если нам не требуется уникальная пара значений в нескольких столбцах, то смысла в них нет, ведь WHERE делает тоже самое, сначала сужает выборку по первому условию, затем по второму и т.д.
Правильно?
Нет, это работает не как 2 отдельных индекса. Погуглите про составные, вроде на ruhighload была хорошая статья