![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 13.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
problem nie jest strikte php'owy nie mniej jednak liczę, że jest tu wielu PRAKTYKOW, ktorzy wyraza swoją opinie.... Jest baza danych, ktorej sa tabele: [wojewodztwa] - [powiaty (wojewodztwo_id) ] [gminy (powiat_id)] [miasta (gmina_id)] (powiazane 1:m) Jest takze tabela "ogloszen", w ktorej to ogloszenia sa przypisywane do odpowiedniego miasta [ogloszenia (miasto_id)] Niby wszystko jest OK, ale przy wyszukiwaniu np wszystkich ogloszen z danego wojewodztwa trzeba robic "czaso i moco chlonne" zlaczenia (?) Jak to ugryzc zeby bylo w miare sprawnie i logicznie (IMG:style_emoticons/default/questionmark.gif) ? Moze w tabeli ogloszen dac nadmiarowe informacje o [woj/pow/gmin] zeby wyszukiwac (filtrowac) szybko prostym selectem ? A moze w repozytoriach encji rozpisac sobie kilka zlaczen o roznych glebokosciach ( czyli do gminy/powiatu cz woj) Jak sądzicie ? PS.: Co prawda powinno byc to bez znaczenia ale dla informacji: Encje z Doctrine2, framework Symfony2 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Opcji masz kilka:
1. zrobic to na joinach tak jak jest (wydaje mi się to najmniej wydajne) 2. Zamiast joinować spróbować podzapytania pobierającego ID miast danego towarzystwa i użyć tego poprzez "miasto_id IN(SELECT ...)" - wbrew pozorom może być szybsze - radzę sprawdzić 3. Jeśli jest możliwośc szukania po województwie to dobrze by było zrezygnować z normalizacji na rzecz wydajności i dodać do tabeli ogłoszeń wojewodztwo_id (analogicznie jeśli można szukać dla danego powiatu to to samo z powiatem itd - ale tylko jeśli to jest potrzebne) - to na bank będzie najwydajniejsze rozwiązanie choć wymaga najwięcej pracy IMO |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 142 Pomógł: 24 Dołączył: 30.03.2009 Skąd: Rokitno Szlacheckie Ostrzeżenie: (0%) ![]() ![]() |
W moim przypadku rozwiązaniem było włączenie query cache na poziomie bazy danych...
Zamiast miasto IN(select...) spróbować EXISTS(select 1 ...) Druga sprawa, materializacja widoku, co sprowadza się to stworzenia tabeli zawierającej wszystkie potrzebne dane olewając w niej normalizację. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 14.09.2025 - 22:24 |