В общем, моя стратегия индексирования была бы примерно такой (пока я использую исключительно SQL Server - при необходимости адаптируйтесь к вашей собственной системе баз данных):
выберите хороший ключ кластеризации — не GUID, не VARCHAR(250)
или что-то в этом роде — хороший ключ кластеризации узкий, уникальный, стабильный, постоянно увеличивающийся - что-то вроде INT IDENTITY
идеально. Делает это вашим кластерным первичным ключом -> дает вам ваш первый индекс в таблице
для любого столбца, который используется в качестве внешнего ключа в другой таблице, добавьте индекс. Это может быть либо индекс с одним столбцом, либо составной индекс — в зависимости от того, что лучше подходит для вашего случая. Важно, чтобы столбец внешнего ключа был первым столбцом в этом индексе (если вы используете составной индекс), иначе преимущества JOIN
или проверки ссылочной целостности будут недоступны для ваша система
И это все на данный момент.
Затем: запустите свою систему — наблюдайте и измерьте — установите базовый уровень. Приложение достаточно быстрое? Если да -> вы закончили - идите домой и наслаждайтесь свободным временем.
Если нет: начните собирать данные и указания, почему приложение работает недостаточно быстро. Посмотрите, например. такие вещи, как DMV в SQL Server, которые сообщают вам о самых неэффективных запросах, или DMV отсутствующего индекса. Проанализируйте тех. Посмотрите, что вы могли бы улучшить. Добавляйте по одному индексу и снова: наблюдайте, измеряйте, сравнивайте с базовым уровнем.
Если у вас есть улучшение -> оставьте этот индекс на месте, и это измерение станет вашим новым базовым уровнем. Промойте и повторяйте, пока вы (и ваши пользователи) не будете довольны производительностью приложения (а затем затем отправляйтесь домой и наслаждайтесь свободным временем).
Чрезмерная индексация в SQL Server может быть хуже, чем отсутствие индексов. Не начинайте со слишком большого количества индексов! Установите только хорошие кластеризованные PK и некластеризованные индексы внешнего ключа — вот и все — затем наблюдайте, измеряйте, оптимизируйте и повторяйте этот цикл.
person
marc_s
schedule
16.08.2012