MySQL: для вызовов ORDER BY (разные поля) я создаю индекс для каждого поля? - PullRequest
1 голос
/ 18 августа 2010

Быстрый вопрос.У меня есть простая таблица с такой структурой:

USERS_TABLE = {id}, name, number_field_1, number_field_2, number_field_3, number_field_4, number_field_5

Сортировка - это главная особенность, одно поле за раз в данный момент.Таблица может содержать до 50 миллионов записей.Большинство вариантов выбора выполняется с помощью поля «id», которое является первичным ключом и индексируется.

Пример запроса:

SELECT * FROM USERS_TABLE WHERE id=10 ORDER BY number_field_1 DESC LIMIT 100;

Вопрос:

Создаю ли я отдельные индексы для каждого "number_field_ *" для оптимизации операторов ORDER BY, или есть лучшийспособ оптимизировать?Спасибо

1 Ответ

1 голос
/ 18 августа 2010

Здесь нет серебряной пули, вам придется проверить это для ваших данных и ваших запросов.

Если все ваши запросы (например, WHERE id = 10) возвращают несколько строк, возможно, не стоит индексировать порядок по столбцам. С другой стороны, если они возвращают много строк, это может сильно помочь.

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

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

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

...