оптимизировать базу данных MySQL с помощью индексов - PullRequest
0 голосов
/ 17 января 2011

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

Ответы [ 4 ]

3 голосов
/ 17 января 2011

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

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

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

2 голосов
/ 17 января 2011

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

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

0 голосов
/ 17 января 2011

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

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

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

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

0 голосов
/ 17 января 2011

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

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

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

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

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

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

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

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

...