Zakładając:
- Używasz już silnika pamięci masowej, który obsługuje FK (np. InnoDB)
- Masz już indeksy w zaangażowanych kolumnach
Wtedy przypuszczam, że lepszą wydajność uzyskasz, jeśli MySQL wymusza integralność. Wymuszanie integralności referencyjnej jest przecież czymś, do czego zoptymalizowane są silniki baz danych. W porównaniu z tym pisanie własnego kodu do zarządzania integralnością w Ruby będzie powolne.
Jeśli musisz przejść z MyISAM do InnoDB, aby uzyskać funkcjonalność FK, musisz rozważyć kompromisy w wydajności między dwoma silnikami.
Jeśli nie masz jeszcze indeksów, musisz zdecydować, czy chcesz je mieć. Ogólnie rzecz biorąc, jeśli więcej czytasz niż piszesz, potrzebujesz (a nawet) indeksów.
Układanie FK na wierzchu rzeczy, które są obecnie indeksowane, powinno spowodować mniejszy spadek ogólnej wydajności niż implementacja tego rodzaju kontroli w kodzie aplikacji.