Invece di
PRIMARY KEY (`expressionId`),
UNIQUE KEY `geneId` (`geneId`,`conditionId`),
usa
PRIMARY KEY(`geneId`,`conditionId`),
INDEX (`expressionId`),
Se nessun'altra tabella fa riferimento a expressionId , elimina quella colonna e l'indice su di essa.
Perché questo aiuta? I dati sono raggruppati con la chiave primaria; stai cercando i dati tramite geneId , che è l'inizio della PK; quindi i dati possono essere recuperati in modo più efficiente, specialmente se la tabella è molto più grande di innodb_buffer_pool_size (che dovrebbe essere circa il 70% della RAM).