Temat: Jak najefektywniej zrobić taki UPDATE
Na początek - wiem, że to Ty tu jesteś szefem i to Ty podejmiesz decyzję. Ale...
1. INSERT OR IGNORE - zakładam, że to odpowiednik Ignore dup vals on unique index. Moim zdaniem powinno się zabronić używania tego, tak jak i triggerów oraz WHEN OTHERS THEN w Oracle. Tak czy siak jeżeli jest to Twoim problemem z wydajnością, to trzeba coś z tym zrobić. Jeżeli nie, to pomnożenie go przez dwa (zakłądając, że i na przypisaniach taki potrzeba...w co wątpię) nie zabije.
2. nie chcesz obciążać inserta - zmierzyłeś ile trwa insert? Ile ich masz na sekundę - 1? 10? 100? Zawsze po jednym wierszu czy po więcej?
3. Dodatkowy join utrudni życie - a to stwórz sobie widok który będzie projekcją tego joina. Tobie miło będzie kodować, a mimo beznadziejności mySQL-a nie powinno go to zaboleć (bo przecież klucze będą zindeksowane).
4-te primo, ultimo ;-). Spójność danych - to jest coś, na utratę czego się dobrowolnie zgadzasz. Ryzykowna zagrywka, i szczerze wątpię czy korzyści są warte tego. Ja to wolę mieć lekko powolny, ale poprawny system, niż świetnie szybki, ale czasem się mylący. Bo taki będzie Twój - pomiędzy insertem po update'cie a kolejnym update'm będzie pokazywał niepoprawne dane. Nie, nie poszedłbym taką drogą za nic. Przynajmniej dopóki nie zrozumiem, że jeden insert (ułamek sekundy) jest tak krytyczny w Twoim systemie - a wątpię, żeby taki był skoro zdecydowałeś się na MySQL.
Z najlepszymi intencjami,
Grzegorz.