![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 206 Pomógł: 0 Dołączył: 26.09.2012 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Mam dwie tabele powiedzmy że to są X, Y X- znajdują się w tej tabeli artykuły do oglądania przez użytkowników, po kolei wyświetla użytkownikowi każdy rekord, gdy użytkownik obejży artykuł zapisuje się do bazy Y numer id artykułu i następnie gdy użytkownik przechodzi do następnego artykułu, wtedy skrypt sprawdza w tabeli Y który artykuł już się wyświetlił (aby nie oglądał tego samego po kolei) i pobiera z tabeli X pierwszy artykuł do wyświetlenia którego id nie jest zapisane w tabeli Y i tak wkółko. Problem polega na tym że tabela Y się przepełnia tzn gdy uzyska kilkadziesiąt tysiecy rekordków należy ją czyścić ponieważ skrypt wyświetlania wolno zaczyna wczytywać. Jest możliwość innego rozwiązania, lub można temu jakoś zaradzić aby nie trzeba było tego czyścić? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 045 Pomógł: 141 Dołączył: 19.09.2006 Skąd: B-tów Ostrzeżenie: (0%) ![]() ![]() |
sprawdź czy dla nowej tabeli Y nie masz zduplikowanych danych, dlatego że zostały pobrane 3 rekordy, a w starej wersji tylko jeden
po drugie NOT EXISTS nie wykorzystuje indeksów co sprawia że całe zapytanie jest wolniejsze, spróbuj je zastąpić przez NOT IN x.ID(SELECT ...). Zauważ że z tabeli X zostało pobrane 6059 rekordów, możesz spróbować ograniczyć tą ilość. Skoro szukany następny wpis to można założyć że ma on większe ID, więc możesz dodać WHERE x.ID>obocne_id AND x.ID NOT IN(...) po dokonaniu zmian zobacz wynik EXPLAIN czy coś się poprawiło |
|
|
![]() ![]() |
![]() |
Aktualny czas: 17.10.2025 - 12:54 |