Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Architektura DB, a php.
Forum PHP.pl > Forum > PHP
arturo23
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 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
Sephirus
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
hind
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ę.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.