Должен ли я добавлять индекс для всех полей в предложении WHERE? - MySQL

В моей программе у меня очень мало вставок, и все, которые запускаются часто, не нужны мгновенно и поэтому были изменены на INSERT DELAYED. Должен ли я пройти через свой код и посмотреть, какие поля указаны в предложении WHERE и добавить индекс для каждого из них? Если да, какой тип индекса я использую? Это только вставки, которые замедляются?

Также я могу использовать эти индексы для любого типа данных?

Ответ 1

Есть два основных места, где мы можем рассмотреть индексирование: столбцы, на которые ссылаются в предложении WHERE и столбцы, используемые в предложениях JOIN. Короче говоря, такие столбцы должны быть проиндексированы, и вам необходимо искать определенные записи.

  • Индексируйте только те столбцы, которые требуются в WHERE и ORDER BY статьи. Индексирование столбцов в изобилии приведет к недостатки.
  • Используйте атрибут NOT NULL для тех столбцов, которые вы считаете индексирование, так что значения NULL никогда не будут сохранены.
  • Используйте параметр -log-long-format для регистрации запросов, которые используются arent индексов. Таким образом, вы можете просмотреть этот файл журнала и настроить запросов соответственно. Также журнал медленных запросов.
  • Оператор EXPLAIN помогает вам показать, как MySQL выполнит запрос. Он показывает, как и в каком порядке соединяются таблицы. Это может будут полезны для определения того, как писать оптимизированные запросы, и нужны ли столбцы для индексирования.

Этот blog является хорошим.

Ответ 2

Не переходите к изменению своих запросов перед тем, как увидите проблему с производительностью - это преждевременная оптимизация. Вместо этого используйте журнал запросов MySQL, чтобы узнать, какие запросы занимают много времени, и сосредоточьтесь на улучшении этих запросов.

Ответ 3

Вы всегда должны добавлять индекс в любое поле, которое должно использоваться в предложении WHERE (для SELECT, UPDATE или DELETE). Тип индекса зависит от типа данных в поле и требуется ли для каждой строки уникальное значение. Обычно тип индекса по умолчанию (Hash vs. Btree) лучше всего оставлять до настроек по умолчанию, если вы действительно не знаете, что делаете.

Теперь, независимо от того, используете ли вы отдельные индексы (по одному для каждого поля) или составные индексы, зависит от того, как работает приложение и является ли более продвинутым объектом, поэтому в целом, если только начать использовать, просто используйте и индексируйте для каждого поля. Обратите внимание, что ваши первичные ключи автоматически имеют индексы, поэтому вам не нужно создавать для них еще один индекс.