| Version 2 (modified by , 6 days ago) ( diff ) |
|---|
Query Optimization
Оптимизација на погледи
all_recipes
Овој поглед се користи за прикажување на сите рецепти во системот, најчесто без филтри или со pagination. Бидејќи не користи JOIN или WHERE услови, не се применуваат индекси.
Време на извршување:
- Пред оптимизација: ~200-400 ms
- После оптимизација: ~200 ms
- Заклучок: Прифатливо време, не е потребна оптимизација.
recipe_details
Се користи за прикажување на детални информации за рецепт, заедно со кујната. Често се користи со филтри по recipe id или cuisine.
Време на извршување:
- Пред оптимизација: ~800-1500 ms
- После оптимизација: ~50-120 ms
Explain plan (пред):
- Seq Scan на табелата recipe
- Nested Loop Join со cuisine
Оптимизација:
CREATE INDEX idx_recipe_cuisine_id ON recipe(cuisine_id);
Explain plan (после):
- Index Scan на recipe
- Hash Join
Заклучок: Значително подобрување, времето е прифатливо.
recipe_ingredients_view
Се користи за прикажување на состојки за даден рецепт, најчесто со филтер по recipe_id.
Време на извршување:
- Пред оптимизација: 3-8 секунди
- После оптимизација: 50-200 ms
Explain plan (пред):
- Seq Scan на recipe_ingredient (10M записи)
Оптимизација:
CREATE INDEX idx_recipe_ingredient_recipe_id ON recipe_ingredient(recipe_id); CREATE INDEX idx_recipe_ingredient_ingredient_id ON recipe_ingredient(ingredient_id);
Explain plan (после):
- Index Scan + Nested Loop
Заклучок: Големо подобрување поради големината на табелата.
recipe_reviews_view
Се користи за приказ на оценки и коментари за рецепти, со филтри по recipe или user.
Време на извршување:
- Пред оптимизација: 2-5 секунди
- После оптимизација: 50-150 ms
Оптимизација:
CREATE INDEX idx_recipe_review_recipe_id ON recipe_review(recipe_id); CREATE INDEX idx_recipe_review_user_id ON recipe_review(user_id);
Заклучок: Значително намалување на времето.
user_favorites_view
Се користи за прикажување на омилени рецепти за даден корисник.
Време на извршување:
- Пред оптимизација: 1-3 секунди
- После оптимизација: 30-100 ms
Оптимизација:
CREATE INDEX idx_recipe_favorite_user_id ON recipe_favorite(user_id); CREATE INDEX idx_recipe_favorite_recipe_id ON recipe_favorite(recipe_id);
Заклучок: Прифатливо време по оптимизација.
quick_recipes
Се користи за прикажување на рецепти со време на подготовка <= 30 минути.
Време на извршување:
- Пред оптимизација: 500-1000 ms
- После оптимизација: 20-80 ms
Оптимизација:
CREATE INDEX idx_recipe_total_time ON recipe(total_time);
Заклучок: Филтрирањето значително се подобрува со индекс.
forum_posts_view
Се користи за прикажување на форум постови заедно со корисник.
Време на извршување:
- Пред оптимизација: 1-2 секунди
- После оптимизација: 50-150 ms
Оптимизација:
CREATE INDEX idx_forumpost_user_id ON forumpost(user_id); CREATE INDEX idx_forumpost_created_at ON forumpost(created_at);
Заклучок: Подобрени перформанси при прикажување и сортирање.
recipe_categories_view
Се користи за прикажување категории на рецепти.
Време на извршување:
- Пред оптимизација: 1-3 секунди
- После оптимизација: 50-150 ms
Оптимизација:
CREATE INDEX idx_recipe_category_recipe_id ON recipe_category(recipe_id); CREATE INDEX idx_recipe_category_category_id ON recipe_category(category_id);
Заклучок: Значително подобрување поради join операциите.
Заклучок
Оптимизацијата на погледите со користење на индекси доведе до значително подобрување на перформансите, особено кај табели со голем број записи (10M+). Времето на извршување се намали од неколку секунди на милисекунди, што е прифатливо за продукциски систем. За погледи без филтри и join операции, индексите немаат значително влијание.
Attachments (2)
- нб (1).docx (1.6 MB ) - added by 6 days ago.
- QueryOptimization.pdf (1.1 MB ) - added by 6 days ago.
