![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 15.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witajcie,
mam baze o strukturze:
i potrzebuje wydobyc dane z 7 tabel. Robie to tak:
Chciałabym dodać jeszcze 2 tabele. Ale na chwilę obecną wydajnościowo działa to tak że po 4 godzinach brak efektu. Co mogę zrobić żeby uzyskać na początek te dane? Dzięki B |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 731 Pomógł: 141 Dołączył: 9.05.2011 Skąd: śląskie Ostrzeżenie: (0%) ![]() ![]() |
Zacznij od jednej tabeli i dokładaj po jednej sprawdzając wyniki oraz explain - czy czasem nie leci po nieindeksowanych danych.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 246 Pomógł: 79 Dołączył: 25.05.2010 Ostrzeżenie: (0%) ![]() ![]() |
Należy zastosować indeksy na kluczach obcych.
Abstrahując od wydajności to należy stosować właściwe typy danych O ile przez rok i datą nic złego się nie stanie, to z kwotą w double możesz się przejechać. Powinno się grupować po wszystkich kolumnach w których nie są użyte funkcje agregujące. To, że MySQL nie wymusza tego to już inna bajka. Czemu to ma służyć? Ten post edytował kartin 15.09.2015, 10:55:14 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Zapytanie ogólnie jest do dupy.
1. b.sum(Kwota) nie ma prawa zadziałać. 2. załóżmy, że masz umowę o id=1, do tego masz dwa zlecenia (umowa_id=1), więc robią ci się dwa rekordy z umowa.id=1. Każda dołączona tabela ma już zwielokrotnione rekordy. 3. najbardziej spowalnia LEFT JOIN 4. Zapytanie powinno wyglądać np. mniej więcej tak:
(oczywiście można to tez inaczej rozwiązać, ale ten sposób jest najbardziej logiczny) |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 15.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
Nie mogę zmienić struktury bazy ani typów danych. Dostałam taki twór z którego muszę wyłowić dane. Ktoś kilka lat temu to napisał i tak już jest.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Pozakładaj Indeksy na kolumnach po których łączysz tabele, bo wg. struktury ich nie masz.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.09.2025 - 13:18 |