Changes between Initial Version and Version 1 of QueryOptimization


Ignore:
Timestamp:
05/06/26 02:01:10 (3 weeks ago)
Author:
231118
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • QueryOptimization

    v1 v1  
     1== Query Optimization ==
     2
     3=== Оптимизација на погледи ===
     4
     5==== all_recipes ====
     6Овој поглед се користи за прикажување на сите рецепти во системот, најчесто без филтри или со pagination. Бидејќи не користи JOIN или WHERE услови, не се применуваат индекси.
     7
     8Време на извршување:
     9 * Пред оптимизација: ~200-400 ms
     10 * После оптимизација: ~200 ms
     11 * Заклучок: Прифатливо време, не е потребна оптимизација.
     12
     13
     14==== recipe_details ====
     15Се користи за прикажување на детални информации за рецепт, заедно со кујната. Често се користи со филтри по recipe id или cuisine.
     16
     17Време на извршување:
     18 * Пред оптимизација: ~800-1500 ms
     19 * После оптимизација: ~50-120 ms
     20
     21Explain plan (пред):
     22 * Seq Scan на табелата recipe
     23 * Nested Loop Join со cuisine
     24
     25Оптимизација:
     26{{{
     27CREATE INDEX idx_recipe_cuisine_id ON recipe(cuisine_id);
     28}}}
     29
     30Explain plan (после):
     31 * Index Scan на recipe
     32 * Hash Join
     33
     34Заклучок: Значително подобрување, времето е прифатливо.
     35
     36
     37==== recipe_ingredients_view ====
     38Се користи за прикажување на состојки за даден рецепт, најчесто со филтер по recipe_id.
     39
     40Време на извршување:
     41 * Пред оптимизација: 3-8 секунди
     42 * После оптимизација: 50-200 ms
     43
     44Explain plan (пред):
     45 * Seq Scan на recipe_ingredient (10M записи)
     46
     47Оптимизација:
     48{{{
     49CREATE INDEX idx_recipe_ingredient_recipe_id ON recipe_ingredient(recipe_id);
     50CREATE INDEX idx_recipe_ingredient_ingredient_id ON recipe_ingredient(ingredient_id);
     51}}}
     52
     53Explain plan (после):
     54 * Index Scan + Nested Loop
     55
     56Заклучок: Големо подобрување поради големината на табелата.
     57
     58
     59==== recipe_reviews_view ====
     60Се користи за приказ на оценки и коментари за рецепти, со филтри по recipe или user.
     61
     62Време на извршување:
     63 * Пред оптимизација: 2-5 секунди
     64 * После оптимизација: 50-150 ms
     65
     66Оптимизација:
     67{{{
     68CREATE INDEX idx_recipe_review_recipe_id ON recipe_review(recipe_id);
     69CREATE INDEX idx_recipe_review_user_id ON recipe_review(user_id);
     70}}}
     71
     72Заклучок: Значително намалување на времето.
     73
     74
     75==== user_favorites_view ====
     76Се користи за прикажување на омилени рецепти за даден корисник.
     77
     78Време на извршување:
     79 * Пред оптимизација: 1-3 секунди
     80 * После оптимизација: 30-100 ms
     81
     82Оптимизација:
     83{{{
     84CREATE INDEX idx_recipe_favorite_user_id ON recipe_favorite(user_id);
     85CREATE INDEX idx_recipe_favorite_recipe_id ON recipe_favorite(recipe_id);
     86}}}
     87
     88Заклучок: Прифатливо време по оптимизација.
     89
     90
     91==== quick_recipes ====
     92Се користи за прикажување на рецепти со време на подготовка <= 30 минути.
     93
     94Време на извршување:
     95 * Пред оптимизација: 500-1000 ms
     96 * После оптимизација: 20-80 ms
     97
     98Оптимизација:
     99{{{
     100CREATE INDEX idx_recipe_total_time ON recipe(total_time);
     101}}}
     102
     103Заклучок: Филтрирањето значително се подобрува со индекс.
     104
     105
     106==== forum_posts_view ====
     107Се користи за прикажување на форум постови заедно со корисник.
     108
     109Време на извршување:
     110 * Пред оптимизација: 1-2 секунди
     111 * После оптимизација: 50-150 ms
     112
     113Оптимизација:
     114{{{
     115CREATE INDEX idx_forumpost_user_id ON forumpost(user_id);
     116CREATE INDEX idx_forumpost_created_at ON forumpost(created_at);
     117}}}
     118
     119Заклучок: Подобрени перформанси при прикажување и сортирање.
     120
     121
     122==== recipe_categories_view ====
     123Се користи за прикажување категории на рецепти.
     124
     125Време на извршување:
     126 * Пред оптимизација: 1-3 секунди
     127 * После оптимизација: 50-150 ms
     128
     129Оптимизација:
     130{{{
     131CREATE INDEX idx_recipe_category_recipe_id ON recipe_category(recipe_id);
     132CREATE INDEX idx_recipe_category_category_id ON recipe_category(category_id);
     133}}}
     134
     135Заклучок: Значително подобрување поради join операциите.
     136
     137
     138=== Заклучок ===
     139
     140Оптимизацијата на погледите со користење на индекси доведе до значително подобрување на перформансите, особено кај табели со голем број записи (10M+). Времето на извршување се намали од неколку секунди на милисекунди, што е прифатливо за продукциски систем. За погледи без филтри и join операции, индексите немаат значително влијание.