Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Optymalizacja sortowania po danych z JOIN
DeyV
post
Post #1





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




Mam problem smile.gif

Proste zapytanie, typu:
  1. SELECT dane.*,
  2. user.*
  3. FROM dane LEFT JOIN user ON ( user.id = dane.userid )
  4. ORDER BY dane.DATA
  5. LIMIT 50

przy poprawnie założonych indexach wykonuje się bardzo szybko.


Czasem jednak pojawia się konieczność posortowania takiego wyniku po danych z tabeli łączonej, np. w tym przykładzie, po nazwisku usera.

I wtedy okazuje się, że żaden index nie chce pomóc, bo pobierane są wszystkie dane z "dane", wtedy wykonywane jest złączenie i dopiero wtedy - wykonywane jest sortowanie i limit.
(zakładając że w "dane" są setki tyś rekordów takie rozwiązanie jest naprawdę bardzo kosztowne :/ )

Czy jesteście w stanie zaproponować jakiekolwiek sposób na optymalizację takiego zapytania?


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
SongoQ
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


Nie mam jak tego sprawdzic moze odwroc sytuacje index na sortowanie i ta tabelke jako glowna w zlaczeniu i do tego right join. Napisz co pokazuje explain w tym i w tym.


--------------------
Go to the top of the page
+Quote Post
DeyV
post
Post #3





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




tak - to byłoby najprostsze rozwiązanie.
Niestety - zapomniałem dodać, że pozostała struktura zapytania, nie związana z tym problemem, nie pozwala na zmianę kolejności łączeń.

Tj. zawsze user musi być łączony do data, nie odwrotnie.


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
SongoQ
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


Co sie nauswa na mysl to wymusic w pierwszej kolejnosci ten index a pozniej reszta niech sobie leci tak jak optymalizator robi.


--------------------
Go to the top of the page
+Quote Post
DeyV
post
Post #5





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




jakieś sugestie jak ?


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
SongoQ
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


Mozesz kilka rzeczy zastosowac:
np SET ENABLE_SEQSCAN TO OFF; lub vacum. Z tego co wygooglowalem to nieraz takie problemy sie zdarzaly w starszej wersji pg ze dla w miare prostych rzeczy uzywal pelnego skanowania.

Mozesz podeslac bardziej szczegolowe dane i explain?

PG to nie ORACLE gdzie mozesz dowolny hint zastosowac.


--------------------
Go to the top of the page
+Quote Post
Sedziwoj
post
Post #7





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Coś nie do końca rozumiem problem, ale nie można użyć pod zapytania z sortowaniem złączenia i znów sortowania?


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


Albo zlaczyc Usera z Danymi INNER JOINEM i do tego union tych rekordow z Danych gdzie nie ma usera przypisanego?


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
SongoQ
post
Post #9





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


Podejrzewam ze union do tego da wiekszy koszt niz sam join.

@DeyV Udalo CI sie to rozwiazac?


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 01:45