Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Architektura DB, a php., Jak to ugryźć - wygoda, wydajność ?
arturo23
post
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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
Sephirus
post
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
Go to the top of the page
+Quote Post
hind
post
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ę.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 14.09.2025 - 22:24