Що се отнася до въпросите за индексите, индексът е не само желателен, но и необходим за "ускоряване" на нещата. Както го разбирам (на „лаик“ термини), функцията на индекса е да ускорява търсенето и възстановяването на данни в таблица.
Причини за използване на индекси:
- Идентифицирайте уникално всеки ред във всяка таблица (първичният ключ все пак е индекс)
- Индексите са сортирани (дори ако данните не са)
- Ускорете търсенията и филтрите:Индексът прави възстановяването на данни по-бързо, тъй като „задържа“ поставянето на данните в таблицата (той „посочва“ данните, които искате да възстановите). Също така улеснява филтрирането на данните от двигателя на базата данни (винаги е по-бързо и по-лесно да се филтрират сортирани данни, отколкото кодирани данни)
- Оптимизирайте начина, по който данните се възстановяват, когато използвате свързани таблици:Всеки външен ключ трябва да бъде индексиран, за да се ускорят заявките, които включват връзки между първичен и външен ключ.
Някои „правила на палеца“, които използвам, за да реша кои полета трябва да бъдат индексирани:
- Всеки първичен ключ е индексиран (очевидният едно:първичният ключ трябва да е уникален, а не нулев)
- Всеки външен ключ трябва да бъде индексиран (за да бъдат ефективни отношенията между първичен и външен ключ)
- Всяко числово поле или поле за дата, в което трябва да извършвам търсения, трябва да бъде индексирано. Въпреки това се опитвам да избягвам
double
(или всеки друг числов тип с плаваща запетая) полета, които трябва да бъдат индексирани, тъй като те обикновено се използват за съхраняване на стойности, които не са предназначени за търсене. - Всеки
char
илиvarchar
полето, в което трябва да извършвам търсения, трябва да бъде индексирано. Опитайте се да избягвате индекси вtext
полета, тъй като те могат да съдържат много големи стойности в тях. - Избягвайте индексиращ двоичен файл (
blob
) полета... няма смисъл - Не паднете в изкушението да индексирате всичко. Отделете време, за да решите кои полета трябва да бъдат индексирани и кои полетане трябва бъде индексиран.