Wpis z mikrobloga

Mam problem z pomysłem na optymalizację poniższego widoku. Po dodaniu NOT EXISTS, żeby wykluczyć zablokowane dane wydajność spada i to prawie o 100%. Z pewnego powodu nie można po prostu dodać kolumny "excluded" bezpośrednio do tabel, bo informacja o tym musi przetrwać nawet po usunięciu danych z innych tabel. Dlatego jest trochę śmiesznie, bo istnieją dwie osobne tabele, które przechowują jedynie informacje, które dane są zablokowane.

Struktura tabel musi pozostać taka sama. Nie mam już za bardzo pomysłu czy da się to poprawić. Na początku to w ogóle zrobiłem straszne dziadostwo bo zrobiłem JOIN na tych tabelach excluded i wtedy to kilka minut trwało potem pobranie danych a nie kilka sekund xD

Ps. Mogłem zrobić jakieś literówki, bo pozmieniałem nazwy danych na fejkowe.

Ps2. Wklejam screena bo widze nie działa tu formatowanie.

#programowanie #sql
Murasame - Mam problem z pomysłem na optymalizację poniższego widoku. Po dodaniu NOT ...

źródło: Capture

Pobierz
  • 13
@Murasame: zamiast not exists dodaj:

WHERE
c.producer_number NOT IN(SELECT [...] FROM excluded_producer)
AND
c.carnumber NOT IN(SELECT [...] FROM excluded_car
@wicherq: Nie dane mogą być niepełne i np. car może nie mieć producer_number itd.

@cohontes a nawet zapomniałem, że coś takiego istnieje xd coś tam się tym pobawiłem ale bez super rezultatów

@niewiemcotutajrobie właśnie korzystam z dbeaver i średnio to działa, nie mogę tego odpalić, bo wyskakują dziwne błędy

@GeDox zmieniłem na NOT IN ale nadal różnica w stosunku do zapytania bez tych warunków wynosi 5s vs 7s, może po prostu
zmieniłem na NOT IN ale nadal różnica w stosunku do zapytania bez tych warunków wynosi 5s vs 7s, może po prostu nie da się zejść bardziej


@Murasame: ofc zapytania będą robione dłużej, bo jest więcej warunków. Dodaj indeksy na polach c.producernumber, eb.producernumber, c.carnumber, ec.carnumber, c.usernumber itd.
Bo te dwa podzapytania to najwieksze cholerstwo


@cohontes: to zależy od zapytania. Przykładowo to, że postgres (do wersji 12) zawsze materializował CTE było #!$%@? od zawsze, bo jest to głupie i forma logicznego zorganizowania zapytania nie powinna wpływać na to jak się ono wykonuje