Does MySQL/InnoDB use table caches when dealing with foreign tables?
Let's see if you have issues with table_open_cache:

SHOW VARIABLES LIKE 'table%cache';
SHOW GLOBAL STATUS LIKE '%open%';
SHOW GLOBAL STATUS LIKE 'Up%';


How many tables do you have in the system (not just the one database)?

FOREIGN_KEYs need to reach into an index of the 'other' table.  This is usually the cost penalty for FKs.  However all such accesses are cached in the innodb_buffer_pool, so it is often not a disk hit.