Förutsatt:
- Du använder redan en lagringsmotor som stöder FK:er (t.ex. InnoDB)
- Du har redan index på kolumnerna som är involverade
Då skulle jag gissa att du får bättre prestanda genom att låta MySQL upprätthålla integritet. Att upprätthålla referensintegritet är trots allt något som databasmotorer är optimerade för att göra. Att skriva din egen kod för att hantera integritet i Ruby kommer att gå långsamt i jämförelse.
Om du behöver gå från MyISAM till InnoDB för att få FK-funktionaliteten måste du överväga avvägningarna i prestanda mellan de två motorerna.
Om du inte redan har index måste du bestämma om du vill ha dem. Generellt sett, om du läser mer än skriver, vill du ha (behöver till och med) indexen.
Att stapla en FK ovanpå saker som för närvarande är indexerade borde orsaka mindre prestandaträff än att implementera den typen av kontroller i din applikationskod.