La clé primaire est-elle automatiquement indexée dans MySQL?

Avez-vous besoin de créer explicitement un index, ou est-il implicite lors de la définition de la clé primaire? La réponse est-elle la même pour MyISAM et InnoDB?

212
demandé sur ElliotSchmelliot 2009-07-02 00:21:26

8 réponses

La clé primaire est toujours indexée. C'est la même chose pour MyISAM et InnoDB, et est généralement vrai pour tous les moteurs de stockage qui prennent en charge les indices.

248
répondu Emil H 2011-12-03 20:41:23

Selon http://dev.mysql.com/doc/refman/5.0/en/constraint-primary-key.html, il semblerait que ce serait implicite

29
répondu PSU_Kardi 2009-07-01 20:25:27

Même si cela a été demandé en 2009, je pensais poster une référence réelle à la documentation MySQL sur les clés primaires. http://dev.mysql.com/doc/refman/5.5/en/optimizing-primary-keys.html

La clé primaire pour une table représente la colonne ou l'ensemble de colonnes que vous utilisez dans vos requêtes les plus vitales. il a un index associé, pour des performances de requête rapides

Pour la référence MySQL 5.0 voir: http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html

La plupart des index MySQL ( PRIMARY KEY , UNIQUE, INDEX et FULLTEXT) sont stocké dans B-arbres. Les Exceptions sont que les index sur les types de données spatiales utilisez R-trees, et que les tables de mémoire prennent également en charge les index de hachage.

12
répondu fyrye 2014-12-02 21:21:34

La clé primaire est implicitement indexée pour MyISAM et InnoDB. Vous pouvez le vérifier en utilisant EXPLAIN sur une requête qui utilise la clé primaire.

10
répondu Patrick Gryciuk 2009-07-01 20:25:05

Vous n'avez pas besoin de créer explicitement un index pour une clé primaire... il est fait par défaut.

8
répondu Rick 2013-11-13 07:36:26

Je suppose que c'est la réponse

mysql> create table test(id int primary key, s varchar(20));
Query OK, 0 rows affected (0.06 sec)

mysql> show indexes from test \G
*************************** 1. row ***************************
        Table: test
   Non_unique: 0
     Key_name: PRIMARY
 Seq_in_index: 1
  Column_name: id
    Collation: A
  Cardinality: 0
     Sub_part: NULL
       Packed: NULL
         Null:
   Index_type: BTREE
      Comment:
Index_comment:
1 row in set (0.00 sec)
6
répondu guest 2015-08-28 07:41:05

Les index

Sont mieux utilisés sur les colonnes fréquemment utilisées dans les clauses where et dans tout type de tri, tel que "order by". Vous pouvez travailler sur une base de données plus complexe, il est donc bon de se rappeler quelques règles simples.

    Les index
  • ralentissent les insertions et les mises à jour, vous voulez donc les utiliser avec précaution sur les colonnes fréquemment mises à jour.
  • Les index accélèrent les clauses where et order by. N'oubliez pas de penser à la façon dont vos données vont être utilisées lors de la construction de votre table. Il ya quelques autres choses à retenir. Si votre table est très petite, c'est-à-dire seulement quelques employés, il est pire d'utiliser un index que de le laisser de côté et de le laisser faire une analyse de table.

  • Les index ne sont vraiment utiles qu'avec des tables qui ont beaucoup de lignes.

  • Une autre chose à retenir, c'est un con dans la situation de la base de données de notre employé, est que si la colonne est de longueur variable, les index (ainsi que la plupart de MySQL) fonctionnent beaucoup moins efficacement.

  • N'oubliez pas les jointures aussi! Les champs de jointure indexés accélèrent les choses.

3
répondu Masood Ul Hassan 2016-07-27 10:58:38

La clé primaire est toujours automatiquement indexée et unique. Alors, méfiez-vous de ne pas créer d'index redondants.

Par exemple, si vous avez créé une table en tant que telle

CREATE TABLE mytable (foo INT NOT NULL PRIMARY KEY, bar INT NOT NULL, baz INT NOT NULL,
  UNIQUE(foo), INDEX(foo)) ENGINE=InnoDB;

Parce que vous voulez indexer la clé primaire et lui imposer une contrainte d'unicité, vous finirez par créer trois index sur foo!

1
répondu dr01 2016-11-25 15:09:17