Mysql
 sql >> Database >  >> RDS >> Mysql

Alternativa alla progettazione di database con colonne enumerate, che porta a scarse prestazioni

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).