![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 764 Pomógł: 3 Dołączył: 30.04.2003 Ostrzeżenie: (0%) ![]() ![]() |
Witam serdecznie,
Mam następującą strukturę bazy danych (tutaj wersja dla PostgreSQL).
Cóż o tej strukturze tabel można powiedzieć: tabela użytkownicy, tabela wiadomości ->> połączone za pomocą tabeli łączące (relacja wiele do wielu). Moje pytania: 1) jak wygląda wydajność przy wyszukiwaniu danych przy takim układzie tabel 2) mam dwa takie zapytania (chcę pobrać listę wszystkich użytkowników którzy napisali wszystkie wiadomości – oczywiście napisane przez nich). a)
![]()
Jaka jest różnica pomiędzy tymi zapytaniami (styl, „profesjonalizm zapisu”, szybkość wykonywania) ![]() PostgreSQL poleceniem EXPLAIN wyrzucił coś takiego: Zapytanie 1) Kod Hash Join (cost=5.31..8.10 rows=20 width=171) Hash Cond: ("outer".uzytkownik_id = "inner".uzytkownik_id) -> Hash Join (cost=3.42..5.75 rows=53 width=118) Hash Cond: ("outer".wiadomosc_id = "inner".wiadomosc_id) -> Seq Scan on wiadomosci w (cost=0.00..1.53 rows=53 width=118) -> Hash (cost=2.94..2.94 rows=194 width=8) -> Seq Scan on uzytkownicy_wiadomosci u_w (cost=0.00..2.94 rows =194 width=8) -> Hash (cost=1.71..1.71 rows=71 width=61) -> Seq Scan on uzytkownicy u (cost=0.00..1.71 rows=71 width=61) (9 rows) Zapytanie 2) Kod Hash Join (cost=5.31..8.10 rows=20 width=158)
Hash Cond: ("outer".uzytkownik_id = "inner".uzytkownik_id) -> Hash Join (cost=3.42..5.75 rows=53 width=118) Hash Cond: ("outer".wiadomosc_id = "inner".wiadomosc_id) -> Seq Scan on wiadomosci (cost=0.00..1.53 rows=53 width=118) -> Hash (cost=2.94..2.94 rows=194 width=8) -> Seq Scan on uzytkownicy_wiadomosci (cost=0.00..2.94 rows=194 width=8) -> Hash (cost=1.71..1.71 rows=71 width=48) -> Seq Scan on uzytkownicy (cost=0.00..1.71 rows=71 width=48) (9 rows) |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 68 Pomógł: 0 Dołączył: 10.07.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Moge Ci powiedziec tylko czym sie roznia te dwa rodzaje zapytan. Ten pierwszy (bez joinow) jest to stara notacja (ale czesto dalej stosowana), natomiast ten z joinami to notacja nowa...
-------------------- "Jedyną pewną metodą unikania porażek jest nie mieć żadnych, nowych pomysłów."
Albert Einstein |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 764 Pomógł: 3 Dołączył: 30.04.2003 Ostrzeżenie: (0%) ![]() ![]() |
Cytat(ins@ne @ 2005-01-07 20:53:27) Moge Ci powiedziec tylko czym sie roznia te dwa rodzaje zapytan. Ten pierwszy (bez joinow) jest to stara notacja (ale czesto dalej stosowana), natomiast ten z joinami to notacja nowa... dzięki:) chyba będę musiał sobie pogrzebać po kolejnych wersjach SQL'a |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 255 Pomógł: 0 Dołączył: 22.04.2004 Skąd: Żoliborz Ostrzeżenie: (0%) ![]() ![]() |
Ja przystaje przy używaniu inner join.
Dlaczego? Jak masz doczynienia ze skomplikowanymi zapytaniami to czasami jest fajnie gdy masz oddzieloną cześć odpowiedzialną za relację z innymi warunkami. Generalnie czytelność ![]() edit--- Zapomniałem jeszcze dodać że przy inner join można stosować using Ten post edytował popbart 7.01.2005, 22:54:54 -------------------- Visual Basic - kto by pomyślał :)
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 16.07.2025 - 10:24 |