![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 27.02.2009 Ostrzeżenie: (10%) ![]() ![]() |
Witam, mam problem, który nie dał mi spać dzisiejszej nocy, dotyczący aktualizacji bazy danych.
Chodzi o sytuację, kiedy stale aktualizuję tabelę, która ma klucz glówny. Jak to przy aktualizacji, mogą pojawiać się nowe dane, albo być poprawiane stare. Dotąd robiłem to tak: INSERT into tabela ON DUPLICATE KEY UPDATE.... Problem, polega na tym, że przy dużej liczbie danych zaczyna się zamulać... Powodem może być specyika aktualizacji, w której orientacyjnie w 99% wypadków wykonywany jest UPDATE, a INSERT bardzo rzadko. Więc w praktyce moja metoda najpierw próbuje robić INSERT, który w 99% przypadków sie nie udaje (okazuje się to po sprawdzeniu klucza głównego, w bardzo długiej liście), następnie wykonuje UPDATE, który sie udaje. Moje pytanie, czy da się jakoś sprytnie odwrócić kolejność działań - coś w stylu: UPDATE tabela (99% się udaje) ON nie_było_co_updatować INSERT (wyjątek dla 1% wyjątków) Zamiast: INSERT INTO tabela (1% się udaje) ON DUPLICATE KEY UPDATE (wyjątek dla 99%) To jakiś tam pomysł, ale każda inna sugestia przyspieszająca aktualizację w takim wypadku byłaby mile widziana (IMG:style_emoticons/default/smile.gif) |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 744 Pomógł: 118 Dołączył: 14.02.2009 Skąd: poziome Ostrzeżenie: (0%) ![]() ![]() |
a nie mozesz robic tak:
1. updatujesz 2. sprawdzasz mysql_affected_rows jesli jest 0 - to znaczy ze nic sie nie zupdatowalo i trzeba wykonac INSERTA inne rozwiazanie to pobrac sobie do tablicy ID (to co masz kluczem glownym) i sprawdzac if($tablica[$klucz]) to znaczy ze trzeba update, else INSERT |
|
|
![]() ![]() |
![]() |
Aktualny czas: 5.10.2025 - 10:44 |