jestem nowy na forum ale często tu zaglądałem bez konieczności rejestracji niestety do dnia dzisiejszego nie mam pojęcia jak rozwiązać dużą ilość zapytań do bazy danych przejdę wiec do rzeczy.
Skrypt który napisałem monitoruje pewne parametry w internecie i zapisuje je do bazy danych dane te są spradzane co pewnien okres czasu który jest obliczany na postawie ostaniego pobrania danych tabel tych jest 11 skrypt sprawdza wszystko co minutę w cronie czy ma pobrać dane czy jest spełniony warunek.
Poniżej podaje przykładowe zapytanie do bazy danych.
SELECT * FROM `strony` s WHERE (SELECT DATA FROM `dane` WHERE id_strony=s.id ORDER BY id DESC LIMIT 1) <= $data - (60*60*24*data_dane) AND data_dane >=1 AND temp_dane = 0
struktura bazy dane
id id_strony wartosc DATA
jeśli zostanie spełniony waruken to uruchamia się skrypt pobierania danych który też zabiera jakiś czas na odczytanie danych z innego serwra wiec dla każdej strony dodane jest pole temp_dane do której jest zapisywana wartość 1 jeśli jest w trakcie pobierania a nastepnie po zakończeiu robie update do bazy z wartoscią = 0 zapewne ten proces też męczy trochę serwer MySQL ale nie znalazłem innej metody na blokowanie danego rekordu aby dane nie były pobrane dwa razy w jedej minucie (miałem takie przypadki wcześniej i dlatego dodałem takie pole w bazie)
moje pytanie jak zrobić bardziej optymalną bazę lub zapytanie do bazy danych przedstawione powyrzej.
Dodam że tabele z danymi często mają parę tysięcy rekordów a nawet około 50-90 tys.(niby nie dużo ale serwery siadają od tego skryptu)
Myślałem żeby zrobić do tabeli strony datę ostatniego pobrania aby nie mielić ciągle tabeli dane w której jest dużo wiecej danych niż w tabeli strony i następnie sprawdzać tylko dane z jednej tabeli czy to dobry pomysł ?
Trochę może nie jasno to opisałem lecz mam nadzieje, żę komuś uda mi się pomóc
Z góry dziękuje
Adam