оптимизировать базу данных MySQL с помощью индексов

0

Мне было интересно, если я добавлю один индекс для каждого поля в каждой таблице моего БД, это заставит мои запросы работать быстрее? или мне нужно анализировать мои запросы и создавать индексы только при необходимости?

  • 0
    Это шутка?
  • 1
    @Dmitri: я думаю, что это серьезный вопрос. Why not simply add an index on every field .
Теги:
query-optimization

4 ответа

3
Лучший ответ

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

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

Я бы посоветовал прочитать руководство MySQL для оптимизацию операторов SELECT, в котором объясняется, при каких условиях могут использоваться индексы.

  • 0
    спасибо человек! Вы сказали, что, вероятно, то же самое, что @Dmitri, но круто: D
2

Чем больше индексов у вас, тем тяжелее вставка/обновление. Так что это компромисс. Выбор запросов, которые не могут использовать индекс, теперь будет более быстрым, но если вы проверите, какие поля вы присоединяетесь (или используете в каком-либо месте), вы не будете торговать таким образом

(и, разумеется, есть дисковое пространство, но большую часть времени мне не очень нравится бой:))

0

Еще один момент заключается в том, что MySql может использовать только один индекс для запроса, поэтому, если ваш запрос

SELECT * FROM table WHERE status = 1 AND col1='foob' AND col2 = 'bar'

MySql будет использовать 1 из индексов и отфильтровать остальные, считывая данные из таблицы.

Если у вас есть такие запросы, лучше создать составной индекс на (status, col1, col2)

  • 0
    Это неправда. MySQL имеет оптимизатор запросов, который обычно решает, какие индексы использовать. Если он может использовать несколько индексов, он будет. Вы также можете указать, какие индексы использовать, используя 'use index (' index1 ',' index2 ') в вашем SQL
  • 0
    Это неправда.
Показать ещё 1 комментарий
-3

Добавление индекса в каждое поле в каждой таблице не является разумным. Вы должны добавлять индексы ТОЛЬКО к столбцам, которые вы используете в предложении WHERE в select OR, по которому вы сортируете.

Часто лучшие результаты достигаются с помощью многоколоночных индексов, специфичных для ваших SQL-запросов.

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

Каждый ненужный индекс замедляет работу базы данных во время вставки, потому что на каждой вставке каждый индекс должен быть обновлен.

Чем больше индексов у вас есть, тем больше вероятность повреждения данных. И, наконец, индексы занимают дополнительное пространство на диске, иногда много места.

Также MySQL пытается сохранить индексы в памяти. Если у вас есть ненужные индексы, есть хорошее изменение. MySQL закончит использование доступной памяти с ненужными индексами, и в этом случае ваша производительность значительно снизится.

Создание правильного типа индексов, вероятно, является самым важным методом оптимизации. Поэтому, когда кто-то спрашивает что-то вроде этого, я думал, что это шутка.

Этот вопрос может задать только тот, кто не прочитал ни одной книги по MySQL. Просто возьмите хорошую книгу и прочитайте ее, тогда вам не придется задавать такие вопросы.

  • 0
    спасибо за ответ ... но это было немного враждебно в конце человек
  • 0
    Я знаю. Я доктор. Дом программирования
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню