Supponendo:
- Stai già utilizzando un motore di archiviazione che supporta FK (ad esempio:InnoDB)
- Hai già indici sulle colonne coinvolte
Quindi immagino che otterrai prestazioni migliori facendo in modo che MySQL applichi l'integrità. L'applicazione dell'integrità referenziale è, dopo tutto, qualcosa per cui i motori di database sono ottimizzati. In confronto, scrivere il tuo codice per gestire l'integrità in Ruby sarà lento.
Se devi passare da MyISAM a InnoDB per ottenere la funzionalità FK, devi considerare i compromessi in termini di prestazioni tra i due motori.
Se non hai già gli indici, devi decidere se li vuoi. In generale, se stai facendo più letture che scritture, vuoi (necessario, anche) gli indici.
Impilare un FK su elementi attualmente indicizzati dovrebbe causare meno prestazioni complessive rispetto all'implementazione di questo tipo di controlli nel codice dell'applicazione.