![]() |
![]() |
![]()
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: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Wrzuć sobie dane do tabeli tymczasowej o strukturze identycznej ze strukturą tabeli właściwej. Będziesz miał wówczas 2 tabele: 1 z aktualnymi danymi, 2 z danymi do zaimportowania. Aktualizację tabeli właściwej zrobisz bardzo szybko poprzez zapytania z wykorzystaniem EXISTS (aktualizacja) oraz NOT EXISTS (wstawienie). Coś w tym stylu:
Możliwe, że gdzieś się machnąłem w powyższym zapytaniu, ale ideę załapiesz. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 1.10.2025 - 13:37 |