![]() |
![]() ![]() |
![]() |
![]()
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
![]() Proste zapytanie, typu:
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..."
|
|
|
![]()
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.
-------------------- |
|
|
![]()
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..."
|
|
|
![]()
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.
-------------------- |
|
|
![]()
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..."
|
|
|
![]()
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. -------------------- |
|
|
![]()
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. |
|
|
![]()
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.
|
|
|
![]()
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? -------------------- |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 01:45 |