Mysql
 sql >> Base de données >  >> RDS >> Mysql

Inconvénient des performances de la clé primaire composite dans MySQL

INSERT et UPDATE les performances varient peu :il en sera presque de même pour (INT) et (INT, INT) clés.

SELECT performance de la PRIMARY KEY composée dépend de nombreux facteurs.

Si votre table est InnoDB , alors la table est implicitement clusterisée sur la PRIMARY KEY valeur.

Cela signifie que les recherches des deux valeurs seront plus rapides si les deux valeurs comprennent la clé :aucune recherche de clé supplémentaire ne sera nécessaire.

En supposant que votre requête ressemble à ceci :

SELECT  *
FROM    mytable
WHERE   col1 = @value1
        AND col2 = @value2

et la disposition du tableau est la suivante :

CREATE TABLE mytable (
        col1 INT NOT NULL,
        col2 INT NOT NULL,
        data VARCHAR(200) NOT NULL,
        PRIMARY KEY pk_mytable (col1, col2)
) ENGINE=InnoDB

, le moteur n'aura qu'à rechercher la valeur exacte de la clé dans la table elle-même.

Si vous utilisez un champ d'auto-incrémentation comme faux identifiant :

CREATE TABLE mytable (
        id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
        col1 INT NOT NULL,
        col2 INT NOT NULL,
        data VARCHAR(200) NOT NULL,
        UNIQUE KEY ix_mytable_col1_col2 (col1, col2)
) ENGINE=InnoDB

, le moteur devra d'abord rechercher les valeurs de (col1, col2) dans l'index ix_mytable_col1_col2 , récupérez le pointeur de ligne de l'index (la valeur de id ) et faites une autre recherche par id dans le tableau lui-même.

Pour MyISAM tables, cependant, cela ne fait aucune différence, car MyISAM les tables sont organisées en tas et le pointeur de ligne est juste un décalage de fichier.

Dans les deux cas, un même index sera créé (pour PRIMARY KEY ou pour UNIQUE KEY ) et sera utilisé de la même manière.