![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 283 Pomógł: 11 Dołączył: 9.07.2010 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Mam kod, który aktualizuje mi dane na stronie ale wykonuje się on dosyć długo ze względu na złożoność operacji jaką musi wykonać. Postanowiłem podzielić proces na pare razy przy użyciu ORDER BY RAND() i LIMIT. Strona działa dwa razy szybciej, ale gdzie nie spojrzę ORDER BY RAND() jest krytykowane z każdej strony. W normalnym zapytaniu aktualizowane są dane około 150 elementów, przy rand dałem limit 25. Drugą sprawę jest, że nie do końca rozumiem zapis tego kodu, dodałem komentarze tam gdzie wiem co się dzieję, a tam gdzie nie mam nadzieje że mi ktoś wyjaśni wtedy może będę miał możliwośc zrobienia czego samemu. Kod:
Struktura w bazie danych oraz nałożone indeksy: test_site(lista obiektów do których można się zapisać): ![]() test_sites(tutaj znajduję się liczone zapisy): ![]() |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Nie analizowałem Twojego kodu (za wcześnie :]), ale:
1. Jeżeli pula rekordów, które chcesz wymieszać (ORDER BY RAND()) to zaledwie 150, nie masz się czego obawiać - skorzystanie z tej konstrukcji nie jest niczym złym, prawdopodobnie jedno z szybszych rozwiązań i pod względem czasu i wydajności. 2. Na pierwszy rzut oka, masz tam kilka zagnieżdżonych pętli, w których wykonują się zapytania - zapewne ilość generowanych zapytań leci w tysiącach jak nie dziesiątkach tysięcy. Podaj swoją strukturę bazy oraz jaką operację chcesz wykonać bo wygląda na to, że chwili obecnej robisz to źle. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 283 Pomógł: 11 Dołączył: 9.07.2010 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Przerobiłem kod i udało mi się go zrobić porządnie (mam nadzieje) i o dziwi udało mi się go zamknąć w takim kodzie:
Postanowiłem skorzystać z tego, że mam dwa pola ilość zapisanych i limit ![]() Nie wiem czemu wcześniej programista mi tego nie zrobił i wymyślił taki skompilowany system, który zliczał za każdym razem od nowa ilość zapisanych. Nie wiem jaki magiczny wpływ ma to forum, ale już sami napisanie tematu pomaga ![]() Dziękuję za informację odnośnie rand ![]() Pozostało jeszcze jedno pytanie, czy powinienem jakoś zmodyfikować istniejące indeksy? Struktura wraz z obecnymi indeksami jest podana na scrennach w pierwszym poście. Ten post edytował boro11 19.12.2013, 07:50:44 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1. Wykonaj zapytanie EXPLAIN SELECT ... Twojego zapytania - zobaczysz, jak wygląda jego obsługa przez bazę danych.
2. Jeżeli korzystasz z silnika InnoDB cały kod powinieneś objąć transakcją. Nie dość, że zapewni to spójność danych to dodatkowo przyspieszy cały kod. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 6.07.2025 - 05:36 |