#mysql #indexing
#mysql #индексирование
Вопрос:
Я хотел бы знать, как должны быть сконструированы и созданы ключи в таблице MYSQL для обеспечения наиболее эффективного поиска.
Предположим, у меня есть таблица с полями:
a, b, c, d
и я использую в своем операторе SELECT все возможные комбинации этих полей в условии WHERE .
Лучше ли создавать единый комбинированный ключ, который охватывает все поля?
Или мне лучше создать ключ для каждого из четырех полей?
Какой вариант имеет лучшую производительность для поискового запроса?
Ключ (ы) должен иметь только тип INDEX .
Спасибо за ваши ответы.
Ответ №1:
Моя кулинарная книга охватывает некоторые основы.
Я использую в своем операторе SELECT все возможные комбинации этих полей в условии WHERE .
Это непрактично. Вместо этого приобретите некоторый опыт работы с пользовательским интерфейсом и решите, к каким 2 столбцам обычно запрашиваются. Затем INDEX(x, y, ...)
укажите, где x и y являются наиболее распространенными.
Если тестируются оба x и y =
, не имеет значения, что вы ставите первым. В противном случае =
сначала поместите один. Если ни один из них не протестирован =
, то наличие более одного столбца не поможет.
Пожалуйста, дайте подсказку о вашем приложении. Недвижимость? Поиск соответствия? Что-то еще?
Лучше ли создавать единый комбинированный ключ, который охватывает все поля?
Редко. Порядок столбцов в индексе имеет значение.
Или мне лучше создать ключ для каждого из четырех полей?
Возможно. Вы также можете добавить больше столбцов, исходя из того, какие комбинации вероятны.
Какой вариант имеет лучшую производительность для поискового запроса?
Нам нужно обсудить конкретные примеры.
Ключ (ы) должен иметь только тип INDEX .
А? «ключ» и «индекс» являются синонимами.
Еще
Поскольку значения являются «непрерывными», «научными» значениями, вам, вероятно, следует использовать FLOAT
для типов данных. И вы, вероятно, будете в основном сравнивать с диапазонами (например, pH <5.0).
При использовании составного индекса индекс перестает быть полезным после первого «диапазона». Следовательно, вы, вероятно, не можете сделать лучше, чем иметь 4 индекса по 1 столбцу. (Давайте посмотрим несколько типичных примеров ваших запросов.)
Комментарии:
1. Большое спасибо Рику Джеймсу за ваши объяснения. Они полезны. Мои таблицы касаются научных данных. Такие параметры, как pH, соленость и т. Д., Где важно комбинировать параметры всеми возможными способами.
2. Они звучат как значения, которые лучше всего хранить как
FLOAT
. Но не тестируйте с помощью = или !=; есть проблемы с округлением, из-за которых такие тесты могут дать неожиданные результаты. (Я добавил к своему ответу.)