= Индекси == Индекс на **project_roles** Често се поставуваат прашлници по **role_name** и **project_id** - добар кандидат за индекс. {{{CREATE INDEX idx_role_name_project ON project_role(name,project_id)}}} == Индекс на прашалник за канали во даден проект === Прашалник {{{ SELECT m.* FROM messages m JOIN channel c ON m.channel_id = c.id WHERE c.name = :channelName AND c.project_id = :projectId ORDER BY m.sent_at; }}} * Бидејќи овој прашалик е многу чест и природата на апликацијата е таква што овозможува да има голем број пораки и канали, може да се индексира според **WHERE** клаузата. {{{ CREATE UNIQUE INDEX idx_channel_name_project ON channel(project_id,name); }}} === Резултати ==== Без Индекс [[Image(message_query_channel_NO_INDEX.png)]] ==== Со Индекс [[Image(message_query_channel_INDEX.png)]] * Тестирањето беше извршено со __12,000__ записи во **channel** табелата и __12,000,000__ записи во **message** табелата. * Има значително подобрување во времето на извршување на прашалникот при користење на индекс * Се гледа дека се користи индексот (**Index Scan**). == Заклучок __Заради тоа што поголемиот дел од прашалниците користат примарни клучеви, изборот на индекси е значително намален. Постоечките индекси се избрани со цел и причина да ги подобрат перформансите на базата само таму каде што има реална потреба.__