![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 124 Pomógł: 0 Dołączył: 25.02.2013 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Zrobilem skrypt ktory poprawia mi wczesniej dodane wyniki tak jak tego chce ale z racji niskich umiejetnosci w temacie MySQL zrobilem to dosc prymitywnym sposobem tworzac kilkanascie/kilkadziesiat praktycznie takich samych zapytan rozniacych sie tylko 1 szczegolem. Czy przy malej ilosci wynikow i czestotliwosci korzystania z tego skryptu ma to jakies wieksze znaczenia w obciazeniu bazy i powinienem to wpakowac wszystko do 1 zapytania czy poza wzlgedami estetycznymi i powiekszonym o kilkanascie linijek pliku nie ma to znaczenia czy operacje beda wykonywane 1 zapytaniem czy zostanie to podzielone na kilkanascie?
|
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 340 Pomógł: 49 Dołączył: 3.07.2009 Skąd: Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
Ta kwestia ma bardzo istotne znaczenie!
Wydajność takiej bazy będzie spadać w niesamowitym tempie wraz ze wzrostem liczby rekordów. Obowiązkowo pracuj nad tym ![]() |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 282 Pomógł: 89 Dołączył: 12.04.2011 Ostrzeżenie: (0%) ![]() ![]() |
Podstawowe pytanie - czy na pewno potrzebujesz trzymać miejsca w bazie danych? Przecież można bardzo szybko uzyskać aktualne dane z bazy kiedy tylko je potrzebujesz:
Takie zapytanie daje nam całą listę dla danej konkurencji, posortowaną wg wyników. Przy indeksie (id_konkurencji, wynik,id_zawodnika ) będzie to działać natychmiast nawet na całkiem sporej bazie danych. Trzymanie w bazie miejsca ma dość poważną wadę - za każdym razem gdy dojdzie nowy rekord trzeba uaktualnić wszystkie miejsca dla tej konkurencji. Poza tym jeśli już faktycznie musisz je trzymać to lepiej w osobnej tabeli, a na tabeli, do której wpisujesz wyniki utworzyć trigger, który robi update miejsc. A jeśli już bardzo, ale to bardzo musisz mieć tak jak podajesz to lepiej zebrać całość posortowanych wyników dla danej konkurencji jednym zapytaniem do tablicy w php i złożyć w pętli jedno większe zapytanie z update, korzystając z konstrukcji CASE WHEN. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 124 Pomógł: 0 Dołączył: 25.02.2013 Ostrzeżenie: (0%) ![]() ![]() |
PMIR13 pomieszales strasznie
![]() To co najbardziej chcialem sie dowiedziec to to czy na podanym wyzej przykladzie jest jakas roznica w wydajnosci miedzy pobieranie czy wysylanie danych w jednym zapytaniu a dzieleniu go na kilka innych prostych czyli np : Update X Set Y=B where A Update X Set Y=D where B Update X Set Y=F where C czy lepiej zrobic jeden skomplikowany Update ktory za 1 razem by wszystko aktualizowal. Ciekawi mnie to rowniez dlatego ze w innych plikach czesto stosuje podobną zagrywke jak juz moje zapytanie jest zbyt skomplikowane i nie jest w stanie dalej do niego dodawac polecen a moge je zamknac i otworzyc nastepne to tak robie. I w konsekwenji na jakies stronie w ktore pobierane sa wyniki z bazy zamiast jednego SELECT ktore pobieraloby wszystkie dane ktore chce mam po kilka czy nawet kilkanscie. Jesli chodzi o trzymanie 'miejsca' w bazie danych to faktycznie nie jest ono wymagane aczkolwiek bardzo duzo razy potrzebuje sprawdzic ktore miejsce ma dany wynik lub ile razy np dany uzytkownik mial wynik z miejsce 1, 2 czy 3. I wtedy wystarczy mi zrobic prosty select na konkretne miejsce niz bawic sie w zapytania liczace ile razy dany wynik byl ktoryms tam z kolei. Dlatego mimo wszystko malym obciazeniem bazy to tylko jedna kolumna z z liczba mam ulatwiony dostep do tej informacji. A update ktory zmuszony jestem robic wynika z tego ze jak dodaje co jakis czas wyniki do tego samego argumentu to kolejnosc tych wynikow sie zmienia i wynik ktore jeszcze niedawno byl najmniejszy moze juz byc 2 albo 3. Gdyby to byla kwestia tylko wyswieltania tych wynikow to nie problem zrobic sortowanie i wsywietlenie tego z kolei wyniku ktory chce ale jak juz robie cos w rodzaju statystyk ukazujacych jak wiele razy jakis uzytkownik ma miejsce 1 czy 2 to juz sie to przyadaje. A chcialbym jeszcze tylko dodac by Cie uspokoic PMIR13 ze to nie dla danej konkurencji sa aktualizowane wyniki co by sugerowalo ze dla tej konkurencji moga byc tysiace wynikow i te tysiace trzeba aktualizowac za kazdym razem. Te wyniki sa dzielone na grupy - argumenty i moze w nich byc maksymalnie 30 wynikow dla danego argumentu i potem towrzony jest nastepny argument. Argumenty sa w osobnej bazie i maja swoje id wiec dodajac wyniki automatycznie jest pobierany argument i tylko dla niego jest ta aktualizacja pozostale wyniki w bazie nie sa ruszane. Ten post edytował lexis72 28.04.2013, 12:01:13 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 05:03 |