![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 113 Pomógł: 14 Dołączył: 25.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Cześć! Mam dwie tabele: items i repetitions. W tabeli items przechowywane są różne pytania (fiszki). W momencie, gdy użytkownik odpowie na pytanie/wykona jakieś ćwiczenia, informacja o tym zapisywana jest w tabeli repetitions. Chcąc wyświetlić z tabeli items pytania, których użytkownik jeszcze nie odpowiedział (a więc nie mają odpowiadającego im rekordu w tabeli repetitions), wykonuję zagnieżdżone zapytanie z LEFT JOIN. Problem polega na tym, że zarówno w tabeli items i repetitions, poszczególny elementy należą do różnych grup. W tabeli items będzie docelowo około 30 tys. wierwszy, które podzielone będą na 3 grupy po 10 tys. każda. Tabela repetitions docelowo powinna zawierać do około 10 milionów rekordów.
Oryginalne zapytanie wygląda w ten sposób:
Jak widać w zapytaniu, najpierw wybieram fragment pierwszej tabeli, potem fragment drugiej tabeli i łączę je ze sobą tak, aby wybrane zostały wszystkie rekordy z tabeli po lewej stronie i odpowiadające im rekordy z tabeli po prawej stronie. Niektóre rekordy z tabeli po lewo nie mają swoich odpowiedników po prawo i to własnie te rekordy wybieram, używając WHERE IS NULL. Czy ktoś mógłby doradzić mi, jak takie pytanie można najlepiej zoptymalizować? Myślałem np. o podzieleniu tabeli items na 3 tabele tak, aby nie było potrzeby określania warunku na tej tabeli. A może najlepszym rozwiązaniem będzie każdemu użytkownikowi z góry przepisać zakładane 10 tys. rekordów odpowiadających rekodom z tablicy po lewo? (Ale w tym wypadku, w przypadku usunięcia lub dodania przynajmniej jednego elementu z tabeli po lewo, będę musiał sprawdzać, czy element został usunięty lub dodany kilka tysięcy razy po prawej stronie.) Bardzo proszę o pomoc! Ten post edytował lukesh 22.11.2011, 01:29:19 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 27.09.2025 - 12:35 |