adbacz
17.01.2017, 22:28:10
W tabeli mam 7 milionów rekordów. Muszę uaktualnić wszystkie, ale chcę to zrobić paczkami. Czyli jednorazowo na przykład 10k. Każdy rekord ma swoje ID, ale numery nie mają zachowanego porządku bo czasami niektóre były usuwane.
Potrzebuję podzielić teraz te rekordy na strony o 10k rekordów, posortować po ID, ale z bazy pobrać tylko ID pierwszego i ostatniego rekordu. W tedy będę mógł sobie uaktualnić rekordy, które mają ID mniejsze niż pierwszy i większe niż ostatni (czyli paczka 10k rekordów). Ale nie chce pobierać tych wszystkich numerów ID, bo to trochę potrwa, zanim baza danych wyśle do skryptu tyle danych, a też serwer będzie musiał tyle danych przechować, a wolałbym tego uniknąć.
Mógłbym również zrobić dwa zapytania, po pierwszy i ostatni rekord, ale to zostawiam jeśli nie będzie się dało zrobić jednym zapytaniem.
trueblue
17.01.2017, 22:35:10
Dlaczego nie użyjesz LIMIT?
Jeśli to update na pojedynczej tabeli i w trakcie aktualizacji dane się nie zmieniają to będzie ok.
adbacz
18.01.2017, 08:42:58
Już tłumaczę. Potrzebuję zapisać i później użyć tego ostatniego numeru ID w następnym wykonaniu tej samej komendy CRON. W ciągu 10 minut dodaje się około 10-20 rekordów, posiadanie tego ID umożliwi mi dokonanie aktualizacji na liście rekordów, które były w bazie w momencie pierwszego wykonania komendy, aż do momentu w którym skończą się rekordy. Potem wszystko zaczyna się od nowa. Nie pomine jakiś rekordów ani nie będę uaktualniał tych, które już uaktualniłem.
Poza tym, mam kilka różnych zapytań operujących na tej samej tabeli, i łatwiej by mi było to ogarnąć, bo muszę aktualizować te same rekordy ale w kilku kolumnach tej tabeli różnymi zapytaniami.
Pyton_000
18.01.2017, 09:01:29
No to zrób sobie coś takiego:
SELECT ID FROM tabelka LIMIT 1
UNION
SELECT ID FROM tabelka LIMIT 10000,1
No i masz 2 ID