Индексы MySQL - сколько достаточно?

Вот хорошая сводка пула потоков в .NET: http://blogs.msdn.com/pedram/archive/2007/08/05/dedicated-thread-or-a-threadpool-thread.aspx

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

15
задан Peter Mortensen 27 September 2012 в 20:23
поделиться

6 ответов

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

В вашем примере вы извлекаете все столбцы и только с 22 строками, и может быть быстрее просто выполнить сканирование таблицы и отсортировать их вместо использования индекса . Оптимизатор может / должен делать это, игнорируя индекс. Если это так, то индекс просто занимает место без всякой пользы. Если к вашей таблице категорий часто обращаются, вы можете захотеть закрепить его в памяти, чтобы сервер db оставался доступным без необходимости постоянно обращаться к диску.

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

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

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

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

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

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

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

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

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

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

22
ответ дан 1 December 2019 в 00:14
поделиться

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

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

13
ответ дан 1 December 2019 в 00:14
поделиться

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

Используя эту информацию вы можете решить, как использовать ключи для таблиц и / или изменить запросы, чтобы сделать их более эффективными. Синтаксис объяснения очень прост.

EXPLAIN SELECT * FROM `categories` ORDER BY `orderid` ASC;

Обратите внимание, что объяснение не фактически выполняет запрос. Итак, если вы Если вы используете это для отладки запроса, выполнение которого занимает 5 минут, объяснение все равно будет очень быстрым.

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

6
ответ дан 1 December 2019 в 00:14
поделиться

Индекс может ускорить выполнение запроса SELECT, но он замедлит запросы INSERT / UPDATE / DELETE, поскольку им также необходимо обновлять индекс, а не только строку.

Это просто личное мнение (у меня нет фактов, подтверждающих это), но я думаю, что если есть запрос, который занимает много времени, и индекс ускорит его - дерзайте! «Слишком много» индексов было бы, если бы вы добавили индексы, которые не принесли никакой пользы (например, не было запросов, это ускорило бы). Например, было бы глупо помещать индекс в каждый столбец «просто потому, что».

4
ответ дан 1 December 2019 в 00:14
поделиться

Не существует магического числа для "наилучшего" числа индексов. Основное правило таково: добавляйте индексы для запросов, которые часто используются и / или должны выполняться быстро.

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

3
ответ дан 1 December 2019 в 00:14
поделиться

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

5
ответ дан 1 December 2019 в 00:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: