![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 65 Pomógł: 5 Dołączył: 22.01.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witajcie. Tworzę forum internetowe i mam problem ze stworzeniem odpowieniego zapytania do bazy.
Mam takie tabele Forums z kluczem ForumId Threads z kluczem ThreadId oraz indexem na ThreadId Posts z kluczem PostId i indexem ThreadId I teraz moje pytanie - jak do SELECT (..) FROM Forums dodać liczbę postów i tematów w tym forum Próbowałem LEFT JOIN 2 i 3 tabelka, ale liczba nie była poprawna. Dodam, że każda z tabel ma pole Show, i powinna być zliczana tylko gdy jest ono równe 1 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 65 Pomógł: 5 Dołączył: 22.01.2010 Ostrzeżenie: (0%) ![]() ![]() |
Nie mogę sobie pozwolić na pobieranie wszystkich wierszy.
Ostatecznie skonstruowałem takie zapytanie:
Każda tabela ma PRIMARY na swoje Id (ForumsForums - ForumId) + klucz rodzica i te według których grupuję / sortuje / whereuje EXPLAIN zapytania wywala: Kod 1 PRIMARY F ref Public,BoardId BoardId 2 const 1 Using where; Using temporary; Using filesort 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 4 2 DERIVED T ref Public Public 1 3 Using temporary; Using filesort 2 DERIVED <derived3> ALL NULL NULL NULL NULL 4 2 DERIVED V eq_ref PRIMARY,ThreadId,UserId PRIMARY 12 xxx.T.ThreadId 1 3 DERIVED ForumsPosts ALL Public NULL NULL NULL 46 Using where; Using temporary; Using filesort Jestem rootem na serwerze, mam 16GB ramu do dyspozycji więc mogę zwiększyć jakoś wartości pamięci podręcznej itp. Jeszcze trochę o typach danych ForumId, ThreadId - INT PostId, UserId - BIGINT Public - BOOL Date - TIMESTAMP Teraz pytanie, jak to się zachowa przy 100k postów i 20k tematów. Czy nie zamuli serwera? Może lepiej ilość postów przechowywać jako pole w tabeli nadrzędnej? |
|
|
![]() ![]() |
![]() |
Aktualny czas: 7.10.2025 - 16:05 |