Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Alternative zum Datenbankdesign mit aufgezählten Spalten, was zu schlechter Leistung führt

Statt

PRIMARY KEY (`expressionId`),
UNIQUE KEY `geneId` (`geneId`,`conditionId`),

verwenden

PRIMARY KEY(`geneId`,`conditionId`),
INDEX (`expressionId`),

Wenn keine anderen Tabellen auf expressionId verweisen , entfernen Sie diese Spalte und den Index darauf.

Warum hilft das? Die Daten werden mit dem Primärschlüssel geclustert; Sie suchen Daten nach geneId , das ist der Beginn des PK; daher können die Daten effizienter abgerufen werden, insbesondere wenn die Tabelle viel größer als innodb_buffer_pool_size ist (was etwa 70 % des Arbeitsspeichers ausmachen sollte).