![]() |
![]() |
![]()
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: 9 Pomógł: 0 Dołączył: 27.02.2009 Ostrzeżenie: (10%) ![]() ![]() |
Dzięki za pomoc (IMG:style_emoticons/default/winksmiley.jpg)
Rozumiem, że rozwiązanie bazuje na tym, że EXISTS/NOEXISTS ma działać znacznie szybciej niż DUPLICATE KEY - bo tutaj w sumie wykonujemy i wstawianie do tabeli tymczasowej (szybsze bo jest pusta), i potem jeszcze raz przekłądamy z tymczasowej do zwykłej hurtowo (ale na podobnej zasadzie)... też sprawdzajac powtórzenia... Na razie udało mi się wyspać i uzyskać dobrą szybkość przez odśmiecenie projektu z kupy nąszalandzkich rozwiązań (złe przyzwyczajenia z małych CMSów), typu 5 razy za duże varchary, robienie pojedynczych query w każdej pętli (IMG:style_emoticons/default/winksmiley.jpg) Rozwiązania, więc narazie nie testuję - miałbym sporo do zmiany bo kilka tam tych tabel jest - zostawię to sobie jako ASA w rękawie na wypadek gdyby się znowu zmuliło (IMG:style_emoticons/default/smile.gif) Ale jeszcze raz dzięki bo Twój post spowodował, że poczytałem o tabelach tymczasowych i memory z którymi nie miałem dotąd do czynienia, a dobrze o nich wiedzieć (IMG:style_emoticons/default/winksmiley.jpg) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 4.10.2025 - 21:09 |