Като цяло моята стратегия за индексиране би била нещо подобно (засега използвам изключително SQL Server - адаптирайте се към вашата собствена система от бази данни, ако е необходимо):
-
изберете добър ключ за клъстериране - не е GUID, не е
VARCHAR(250)
или нещо такова - доброто ключът за клъстериране е тесен, уникален, стабилен, непрекъснато нарастващ - нещо катоINT IDENTITY
перфектно е. Прави това ваш клъстърен първичен ключ -> дава ви първия ви индекс в таблицата -
за всяка колона, която се използва като външен ключ в друга таблица - добавете индекс. Може да бъде индекс на една колона - или може да е съставен индекс - каквото работи най-добре за вашия случай. Важно е колоната за външен ключ да бъдепърва колона в този индекс (ако използвате съставен индекс) - в противен случай предимствата за
JOIN
или за проверка на референтната цялост няма да бъдат достъпни за вашата система
И това е всичко за сега.
След това:стартирайте вашата система - наблюдавайте и измервайте - установете базова линия. Достатъчно бързо ли е приложението? Ако да -> сте готови - приберете се вкъщи и се насладете на свободното си време.
Ако не:тогава започнете да събирате данни и индикации защо приложението не е достатъчно бързо. Вижте напр. неща като DMV в SQL Server, които ви казват за най-лошо представящите се заявки, или липсващия индекс DMV . Анализирайте ги. Вижте какво можете да подобрите. Добавете един индекс наведнъж и отново:наблюдавайте, измервайте, сравнявайте с вашата базова линия.
Ако имате подобрение -> оставете този индекс на място и това измерване е вашата нова базова линия. Изплакнете и повторете, докато вие (и вашите потребители) сте доволни от работата на приложението (и след това приберете се вкъщи и се насладете на почивката си).
Прекомерното индексиране в SQL Server може да бъде по-лошо отколкото без никакви индекси. Не започвайте с твърде много индекси като начало! Установете само добрите клъстериран PK и чужд ключ неклъстерни индекси - това е всичко - след това наблюдавайте, измервайте, оптимизирайте и повторете този цикъл.