wiki:QueryOptimization

Version 2 (modified by 231118, 6 days ago) ( diff )

--

Query Optimization

Оптимизација на погледи

Query Optimization Report

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)

Note: See TracWiki for help on using the wiki.