wiki:QueryOptimization

Version 2 (modified by 231075, 3 weeks ago) ( diff )

--

Индекси и оптимизација на прашалници


View1: Просечна оценка по продавач (vw_avg_rating_per_vendor)

1. Примарен филтер за погледот vw_avg_rating_per_vendor ќе биде според неговото id (vendor_id на продавачот).

2. Примарен случај на употреба ќе е преглед на просечната оценка на секој продавач врз основа на рецензии од проекти. За овој поглед ни се важни перформансите, бидејќи без него се губи време при извршување.

3. Иницијалното време за извршување на погледот е 1m 24s 217ms. Ова не е прифатливо време за апликацијата па затоа пристапуваме кон индексирање.

[SCREENSHOT: SELECT извршување пред индексирање - резултат со време 1m 24s 217ms]

4. Најбавните операции се full scan на табелите:

  • Project - 26k cost
  • Client_Vendor_Contract - 7k cost

[SCREENSHOT: Explain Plan приказ пред индексирање - прикажи го целото дрво со Full Scan редовите истакнати]

Времето изминато во извршување на операциите insert и update пред индексирање изнесува:

[SCREENSHOT: INSERT во Project - пред индексирање]

[SCREENSHOT: UPDATE во Project - пред индексирање]

[SCREENSHOT: INSERT во Client_Vendor_Contract - пред индексирање]

[SCREENSHOT: UPDATE во Client_Vendor_Contract - пред индексирање]

5. По креирање на индексите:

CREATE INDEX idx_project_contract_id ON Project (contract_id);
CREATE INDEX idx_cvc_client_id ON Client_Vendor_Contract (client_id);
CREATE INDEX idx_cvc_vendor_id ON Client_Vendor_Contract (vendor_id);

Времето изминато во извршување на query-то со индекси изнесува:

[SCREENSHOT: SELECT извршување по индексирање - прикажи го новото време]

[SCREENSHOT: Explain Plan по индексирање - прикажи ги Index Scan редовите наместо Full Scan]

6. Времето изминато во извршување на операциите insert и update по индексирање изнесува:

[SCREENSHOT: INSERT во Project - по индексирање]

[SCREENSHOT: UPDATE во Project - по индексирање]

[SCREENSHOT: INSERT во Client_Vendor_Contract - по индексирање]

[SCREENSHOT: UPDATE во Client_Vendor_Contract - по индексирање]


View2: Вкупен буџет по клиент (vw_budget_per_client)

1. Примарен филтер за погледот vw_budget_per_client ќе биде според неговото id (client_id на клиентот).

2. Примарен случај на употреба ќе е преглед на вкупниот буџет потрошен по клиент низ сите проекти и договори. За овој поглед ни се важни перформансите, бидејќи без него се губи време при извршување.

3. Иницијалното време за извршување на погледот е 320ms. Ова не е прифатливо време за апликацијата па затоа пристапуваме кон индексирање.

[SCREENSHOT: SELECT извршување пред индексирање - резултат со време 320ms]

4. Најбавните операции се full scan на табелите:

  • Project - 26k cost
  • Client_Vendor_Contract - 7k cost

[SCREENSHOT: Explain Plan приказ пред индексирање]

Времето изминато во извршување на операциите insert и update пред индексирање изнесува:

[SCREENSHOT: INSERT во Project - пред индексирање]

[SCREENSHOT: UPDATE во Project - пред индексирање]

[SCREENSHOT: INSERT во Client_Vendor_Contract - пред индексирање]

[SCREENSHOT: UPDATE во Client_Vendor_Contract - пред индексирање]

5. Индексите креирани во View1 ги покриваат и овие табели. Времето изминато во извршување на query-то со индекси изнесува:

[SCREENSHOT: SELECT извршување по индексирање - прикажи го новото време]

[SCREENSHOT: Explain Plan по индексирање]

6. Времето изминато во извршување на операциите insert и update по индексирање изнесува:

[SCREENSHOT: INSERT во Project - по индексирање]

[SCREENSHOT: UPDATE во Project - по индексирање]

[SCREENSHOT: INSERT во Client_Vendor_Contract - по индексирање]

[SCREENSHOT: UPDATE во Client_Vendor_Contract - по индексирање]


View3: Вкупен буџет по продавач (vw_budget_per_vendor)

1. Примарен филтер за погледот vw_budget_per_vendor ќе биде според неговото id (vendor_id на продавачот).

2. Примарен случај на употреба ќе е преглед на вкупниот буџет потрошен по продавач низ сите проекти и договори. За овој поглед ни се важни перформансите, бидејќи без него се губи време при извршување.

3. Иницијалното време за извршување на погледот е 319ms. Ова не е прифатливо време за апликацијата па затоа пристапуваме кон индексирање.

[SCREENSHOT: SELECT извршување пред индексирање - резултат со време 319ms]

4. Најбавните операции се full scan на табелите:

  • Project - 26k cost
  • Client_Vendor_Contract - 7k cost

[SCREENSHOT: Explain Plan приказ пред индексирање]

Времето изминато во извршување на операциите insert и update пред индексирање изнесува:

[SCREENSHOT: INSERT во Project - пред индексирање]

[SCREENSHOT: UPDATE во Project - пред индексирање]

[SCREENSHOT: INSERT во Client_Vendor_Contract - пред индексирање]

[SCREENSHOT: UPDATE во Client_Vendor_Contract - пред индексирање]

5. Индексите креирани во View1 ги покриваат и овие табели. Времето изминато во извршување на query-то со индекси изнесува:

[SCREENSHOT: SELECT извршување по индексирање - прикажи го новото време]

[SCREENSHOT: Explain Plan по индексирање]

6. Времето изминато во извршување на операциите insert и update по индексирање изнесува:

[SCREENSHOT: INSERT во Project - по индексирање]

[SCREENSHOT: UPDATE во Project - по индексирање]

[SCREENSHOT: INSERT во Client_Vendor_Contract - по индексирање]

[SCREENSHOT: UPDATE во Client_Vendor_Contract - по индексирање]


View4: Клиенти по индустрија (vw_clients_per_industry)

1. Примарен филтер за погледот vw_clients_per_industry ќе биде според неговото id (industry_id на индустријата).

2. Примарен случај на употреба ќе е преглед на сите клиенти кои припаѓаат на одредена индустрија. За овој поглед ни се важни перформансите, бидејќи без него се губи време при извршување.

3. Иницијалното време за извршување на погледот е 94ms. Ова не е прифатливо време за апликацијата па затоа пристапуваме кон индексирање.

[SCREENSHOT: SELECT извршување пред индексирање - резултат со време 94ms]

4. Најбавната операција е full scan на табелата:

  • Client - 500 cost

[SCREENSHOT: Explain Plan приказ пред индексирање]

Времето изминато во извршување на операциите insert и update пред индексирање изнесува:

[SCREENSHOT: INSERT во Client - пред индексирање]

[SCREENSHOT: UPDATE во Client - пред индексирање]

5. По креирање на индексот:

CREATE INDEX idx_client_industry_id ON Client (industry_id);

Времето изминато во извршување на query-то со индекси изнесува:

[SCREENSHOT: SELECT извршување по индексирање - прикажи го новото време]

[SCREENSHOT: Explain Plan по индексирање]

6. Времето изминато во извршување на операциите insert и update по индексирање изнесува:

[SCREENSHOT: INSERT во Client - по индексирање]

[SCREENSHOT: UPDATE во Client - по индексирање]


View5: Договори по клиент (vw_contracts_per_client)

1. Примарен филтер за погледот vw_contracts_per_client ќе биде според неговото id (client_id на клиентот).

2. Примарен случај на употреба ќе е преглед на сите активни и историски договори за одреден клиент. За овој поглед ни се важни перформансите, бидејќи без него се губи време при извршување.

3. Иницијалното време за извршување на погледот е 399ms. Ова не е прифатливо време за апликацијата па затоа пристапуваме кон индексирање.

[SCREENSHOT: SELECT извршување пред индексирање - резултат со време 399ms]

4. Најбавната операција е full scan на табелата:

  • Client_Vendor_Contract - 7k cost

[SCREENSHOT: Explain Plan приказ пред индексирање]

Времето изминато во извршување на операциите insert и update пред индексирање изнесува:

[SCREENSHOT: INSERT во Client_Vendor_Contract - пред индексирање]

[SCREENSHOT: UPDATE во Client_Vendor_Contract - пред индексирање]

5. Индексите креирани во View1 ги покриваат и овие табели. Времето изминато во извршување на query-то со индекси изнесува:

[SCREENSHOT: SELECT извршување по индексирање - прикажи го новото време]

[SCREENSHOT: Explain Plan по индексирање]

6. Времето изминато во извршување на операциите insert и update по индексирање изнесува:

[SCREENSHOT: INSERT во Client_Vendor_Contract - по индексирање]

[SCREENSHOT: UPDATE во Client_Vendor_Contract - по индексирање]


View6: Договори по продавач (vw_contracts_per_vendor)

1. Примарен филтер за погледот vw_contracts_per_vendor ќе биде според неговото id (vendor_id на продавачот).

2. Примарен случај на употреба ќе е преглед на сите активни и историски договори за одреден продавач. За овој поглед ни се важни перформансите, бидејќи без него се губи време при извршување.

3. Иницијалното време за извршување на погледот е 5s 887ms. Ова не е прифатливо време за апликацијата па затоа пристапуваме кон индексирање.

[SCREENSHOT: SELECT извршување пред индексирање - резултат со време 5s 887ms]

4. Најбавната операција е full scan на табелата:

  • Client_Vendor_Contract - 7k cost

[SCREENSHOT: Explain Plan приказ пред индексирање]

Времето изминато во извршување на операциите insert и update пред индексирање изнесува:

[SCREENSHOT: INSERT во Client_Vendor_Contract - пред индексирање]

[SCREENSHOT: UPDATE во Client_Vendor_Contract - пред индексирање]

5. Индексите креирани во View1 ги покриваат и овие табели. Времето изминато во извршување на query-то со индекси изнесува:

[SCREENSHOT: SELECT извршување по индексирање - прикажи го новото време]

[SCREENSHOT: Explain Plan по индексирање]

6. Времето изминато во извршување на операциите insert и update по индексирање изнесува:

[SCREENSHOT: INSERT во Client_Vendor_Contract - по индексирање]

[SCREENSHOT: UPDATE во Client_Vendor_Contract - по индексирање]


View7: Број на проекти по статус по клиент (vw_project_count_by_status_per_client)

1. Примарен филтер за погледот vw_project_count_by_status_per_client ќе биде според неговото id (client_id на клиентот).

2. Примарен случај на употреба ќе е преглед на бројот на проекти групирани по статус за одреден клиент. За овој поглед ни се важни перформансите, бидејќи без него се губи време при извршување.

3. Иницијалното време за извршување на погледот е 317ms. Ова не е прифатливо време за апликацијата па затоа пристапуваме кон индексирање.

[SCREENSHOT: SELECT извршување пред индексирање - резултат со време 317ms]

4. Најбавните операции се full scan на табелите:

  • Project - 26k cost
  • Client_Vendor_Contract - 7k cost

[SCREENSHOT: Explain Plan приказ пред индексирање]

Времето изминато во извршување на операциите insert и update пред индексирање изнесува:

[SCREENSHOT: INSERT во Project - пред индексирање]

[SCREENSHOT: UPDATE во Project - пред индексирање]

[SCREENSHOT: INSERT во Client_Vendor_Contract - пред индексирање]

[SCREENSHOT: UPDATE во Client_Vendor_Contract - пред индексирање]

5. Индексите креирани во View1 ги покриваат и овие табели. Времето изминато во извршување на query-то со индекси изнесува:

[SCREENSHOT: SELECT извршување по индексирање - прикажи го новото време]

[SCREENSHOT: Explain Plan по индексирање]

6. Времето изминато во извршување на операциите insert и update по индексирање изнесува:

[SCREENSHOT: INSERT во Project - по индексирање]

[SCREENSHOT: UPDATE во Project - по индексирање]

[SCREENSHOT: INSERT во Client_Vendor_Contract - по индексирање]

[SCREENSHOT: UPDATE во Client_Vendor_Contract - по индексирање]


View8: Број на проекти по статус по продавач (vw_project_count_by_status_per_vendor)

1. Примарен филтер за погледот vw_project_count_by_status_per_vendor ќе биде според неговото id (vendor_id на продавачот).

2. Примарен случај на употреба ќе е преглед на бројот на проекти групирани по статус за одреден продавач. За овој поглед ни се важни перформансите, бидејќи без него се губи време при извршување.

3. Иницијалното време за извршување на погледот е 317ms. Ова не е прифатливо време за апликацијата па затоа пристапуваме кон индексирање.

[SCREENSHOT: SELECT извршување пред индексирање - резултат со време 317ms]

4. Најбавните операции се full scan на табелите:

  • Project - 26k cost
  • Client_Vendor_Contract - 7k cost

[SCREENSHOT: Explain Plan приказ пред индексирање]

Времето изминато во извршување на операциите insert и update пред индексирање изнесува:

[SCREENSHOT: INSERT во Project - пред индексирање]

[SCREENSHOT: UPDATE во Project - пред индексирање]

[SCREENSHOT: INSERT во Client_Vendor_Contract - пред индексирање]

[SCREENSHOT: UPDATE во Client_Vendor_Contract - пред индексирање]

5. Индексите креирани во View1 ги покриваат и овие табели. Времето изминато во извршување на query-то со индекси изнесува:

[SCREENSHOT: SELECT извршување по индексирање - прикажи го новото време]

[SCREENSHOT: Explain Plan по индексирање]

6. Времето изминато во извршување на операциите insert и update по индексирање изнесува:

[SCREENSHOT: INSERT во Project - по индексирање]

[SCREENSHOT: UPDATE во Project - по индексирање]

[SCREENSHOT: INSERT во Client_Vendor_Contract - по индексирање]

[SCREENSHOT: UPDATE во Client_Vendor_Contract - по индексирање]


View9: Проекти по клиент (vw_projects_per_client)

1. Примарен филтер за погледот vw_projects_per_client ќе биде според неговото id (client_id на клиентот).

2. Примарен случај на употреба ќе е преглед на сите проекти поврзани со одреден клиент. За овој поглед ни се важни перформансите, бидејќи без него се губи време при извршување.

3. Иницијалното време за извршување на погледот е 626ms. Ова не е прифатливо време за апликацијата па затоа пристапуваме кон индексирање.

[SCREENSHOT: SELECT извршување пред индексирање - резултат со време 626ms]

4. Најбавните операции се full scan на табелите:

  • Project - 26k cost
  • Client_Vendor_Contract - 7k cost

[SCREENSHOT: Explain Plan приказ пред индексирање]

Времето изминато во извршување на операциите insert и update пред индексирање изнесува:

[SCREENSHOT: INSERT во Project - пред индексирање]

[SCREENSHOT: UPDATE во Project - пред индексирање]

[SCREENSHOT: INSERT во Client_Vendor_Contract - пред индексирање]

[SCREENSHOT: UPDATE во Client_Vendor_Contract - пред индексирање]

5. Индексите креирани во View1 ги покриваат и овие табели. Времето изминато во извршување на query-то со индекси изнесува:

[SCREENSHOT: SELECT извршување по индексирање - прикажи го новото време]

[SCREENSHOT: Explain Plan по индексирање]

6. Времето изминато во извршување на операциите insert и update по индексирање изнесува:

[SCREENSHOT: INSERT во Project - по индексирање]

[SCREENSHOT: UPDATE во Project - по индексирање]

[SCREENSHOT: INSERT во Client_Vendor_Contract - по индексирање]

[SCREENSHOT: UPDATE во Client_Vendor_Contract - по индексирање]


View10: Проекти по продавач (vw_projects_per_vendor)

1. Примарен филтер за погледот vw_projects_per_vendor ќе биде според неговото id (vendor_id на продавачот).

2. Примарен случај на употреба ќе е преглед на сите проекти поврзани со одреден продавач. За овој поглед ни се важни перформансите, бидејќи без него се губи време при извршување.

3. Иницијалното време за извршување на погледот е 445ms. Ова не е прифатливо vrijeme за апликацијата па затоа пристапуваме кон индексирање.

[SCREENSHOT: SELECT извршување пред индексирање - резултат со време 445ms]

4. Најбавните операции се full scan на табелите:

  • Project - 26k cost
  • Client_Vendor_Contract - 7k cost

[SCREENSHOT: Explain Plan приказ пред индексирање]

Времето изминато во извршување на операциите insert и update пред индексирање изнесува:

[SCREENSHOT: INSERT во Project - пред индексирање]

[SCREENSHOT: UPDATE во Project - пред индексирање]

[SCREENSHOT: INSERT во Client_Vendor_Contract - пред индексирање]

[SCREENSHOT: UPDATE во Client_Vendor_Contract - пред индексирање]

5. Индексите креирани во View1 ги покриваат и овие табели. Времето изминато во извршување на query-то со индекси изнесува:

[SCREENSHOT: SELECT извршување по индексирање - прикажи го новото време]

[SCREENSHOT: Explain Plan по индексирање]

6. Времето изминато во извршување на операциите insert и update по индексирање изнесува:

[SCREENSHOT: INSERT во Project - по индексирање]

[SCREENSHOT: UPDATE во Project - по индексирање]

[SCREENSHOT: INSERT во Client_Vendor_Contract - по индексирање]

[SCREENSHOT: UPDATE во Client_Vendor_Contract - по индексирање]


View11: Нерешени тикети за спорови (vw_unresolved_dispute_tickets)

1. Примарен филтер за погледот vw_unresolved_dispute_tickets ќе биде според project_id на проектот или assigned_management_user_id на корисникот.

2. Примарен случај на употреба ќе е преглед на сите активни нерешени тикети за спорови доделени на одреден менаџмент корисник или поврзани со одреден проект. За овој поглед ни се важни перформансите, бидејќи без него се губи време при извршување.

3. Иницијалното време за извршување на погледот е 731ms. Ова не е прифатливо vrijeme за апликацијата па затоа пристапуваме кон индексирање.

[SCREENSHOT: SELECT извршување пред индексирање - резултат со време 731ms]

4. Најбавната операција е full scan на табелата:

  • Dispute_Ticket - 9k cost

[SCREENSHOT: Explain Plan приказ пред индексирање]

Времето изминато во извршување на операциите insert и update пред индексирање изнесува:

[SCREENSHOT: INSERT во Dispute_Ticket - пред индексирање]

[SCREENSHOT: UPDATE во Dispute_Ticket - пред индексирање]

5. По креирање на индексите:

CREATE INDEX idx_dispute_ticket_review_id ON Dispute_Ticket (review_id);
CREATE INDEX idx_dispute_ticket_is_resolved ON Dispute_Ticket (is_resolved);

Времето изминато во извршување на query-то со индекси изнесува:

[SCREENSHOT: SELECT извршување по индексирање - прикажи го новото време]

[SCREENSHOT: Explain Plan по индексирање]

6. Времето изминато во извршување на операциите insert и update по индексирање изнесува:

[SCREENSHOT: INSERT во Dispute_Ticket - по индексирање]

[SCREENSHOT: UPDATE во Dispute_Ticket - по индексирање]


View12: Претплати на продавачи (vw_vendor_subscriptions)

1. Примарен филтер за погледот vw_vendor_subscriptions ќе биде според неговото id (vendor_id на продавачот).

2. Примарен случај на употреба ќе е преглед на активните и историските претплати за одреден продавач. За овој поглед ни се важни перформансите, бидејќи без него се губи време при извршување.

3. Иницијалното време за извршување на погледот е 37ms. Ова е прифатливо време за апликацијата.

[SCREENSHOT: SELECT извршување пред индексирање - резултат со време 37ms]

4. Најбавната операција е full scan на табелата:

  • Vendor_Subscription - 180 cost

Иако времето е прифатливо, сепак пристапуваме кон индексирање за дополнителна оптимизација.

[SCREENSHOT: Explain Plan приказ пред индексирање]

Времето изминато во извршување на операциите insert и update пред индексирање изнесува:

[SCREENSHOT: INSERT во Vendor_Subscription - пред индексирање]

[SCREENSHOT: UPDATE во Vendor_Subscription - пред индексирање]

5. По креирање на индексите:

CREATE INDEX idx_vendorsub_vendor_id ON Vendor_Subscription (vendor_id);
CREATE INDEX idx_vendorsub_tier_id ON Vendor_Subscription (tier_id);

Времето изминато во извршување на query-то со индекси изнесува:

[SCREENSHOT: SELECT извршување по индексирање - прикажи го новото време]

[SCREENSHOT: Explain Plan по индексирање]

6. Времето изминато во извршување на операциите insert и update по индексирање изнесува:

[SCREENSHOT: INSERT во Vendor_Subscription - по индексирање]

[SCREENSHOT: UPDATE во Vendor_Subscription - по индексирање]

Attachments (48)

Download all attachments as: .zip

Note: See TracWiki for help on using the wiki.