631 votes

Différences entre INDEX, PRIMARY, UNIQUE, FULLTEXT dans MySQL ?

Quelles sont les différences entre PRIMARY, UNIQUE, INDEX et FULLTEXT lors de la création de tables MySQL ?

Comment pourrais-je les utiliser ?

691voto

thomasrutter Points 42905

Différences

  • KEY ou INDEX fait référence à un indice normal non unique. Des valeurs non distinctes pour l'indice sont autorisées, ainsi l'indice mai contiennent des lignes ayant des valeurs identiques dans toutes les colonnes de l'index. Ces index n'imposent aucune restriction à vos données. Ils ne sont donc utilisés que pour garantir la rapidité d'exécution de certaines requêtes.

  • UNIQUE fait référence à un index où toutes les lignes de l'index doivent être uniques. En d'autres termes, une même ligne ne peut pas avoir des valeurs non NULL identiques à celles d'une autre ligne pour toutes les colonnes de cet index. En plus d'être utilisés pour accélérer les requêtes, les index UNIQUE peuvent être utilisés pour imposer des restrictions sur les données, car le système de base de données ne permet pas de briser cette règle des valeurs distinctes lors de l'insertion ou de la mise à jour des données.

    Votre système de base de données peut permettre l'application d'un index UNIQUE aux colonnes qui autorisent les valeurs NULL, auquel cas deux lignes peuvent être identiques si elles contiennent toutes deux une valeur NULL (le raisonnement est le suivant : NULL est considéré comme n'étant pas égal à lui-même). Toutefois, en fonction de votre application, vous mai trouvent cela indésirable : si vous souhaitez éviter cela, vous devez interdire les valeurs NULL dans les colonnes concernées.

  • PRIMAIRE se comporte exactement comme un index UNIQUE, sauf qu'il est toujours nommé "PRIMAIRE" et qu'il ne peut y en avoir qu'un seul sur une table (et qu'il n'y a pas d'autre index de ce type). devrait est toujours égal à un, bien que certains systèmes de bases de données n'appliquent pas cette règle). Un index PRIMAIRE est conçu comme un moyen primaire d'identifier de manière unique n'importe quelle ligne de la table, donc contrairement à UNIQUE, il ne doit pas être utilisé sur des colonnes qui autorisent des valeurs NULL. Votre index PRIMAIRE doit être sur le plus petit nombre de colonnes qui sont suffisantes pour identifier une ligne de façon unique. Souvent, il s'agit d'une seule colonne contenant un numéro unique auto-incrémenté, mais s'il y a autre chose qui peut identifier une ligne de manière unique, comme le "code pays" dans une liste de pays, vous pouvez l'utiliser à la place.

    Certains systèmes de bases de données (comme InnoDB de MySQL) stockent les enregistrements d'une table sur le disque dans l'ordre dans lequel ils apparaissent dans l'index PRIMAIRE.

  • FULLTEXT Les index sont différents de tout ce qui précède, et leur comportement diffère considérablement entre les systèmes de base de données. Les index FULLTEXT ne sont utiles que pour les recherches en texte intégral effectuées à l'aide de la clause MATCH() / AGAINST(), contrairement aux trois index ci-dessus - qui sont généralement implémentés en interne à l'aide de b-trees (permettant la sélection, le tri ou les plages à partir de la colonne la plus à gauche) ou de tables de hachage (permettant la sélection à partir de la colonne la plus à gauche).

    Alors que les autres types d'index sont polyvalents, l'index FULLTEXT est spécialisé, en ce sens qu'il sert un objectif précis : il est uniquement utilisé pour une fonction de "recherche plein texte".

Similitudes

  • Tous ces index peuvent contenir plus d'une colonne.

  • À l'exception de FULLTEXT, l'ordre des colonnes est significatif : pour que l'index soit utile à une requête, celle-ci doit utiliser les colonnes de l'index en commençant par la gauche - elle ne peut pas utiliser uniquement la deuxième, troisième ou quatrième partie d'un index, à moins qu'elle n'utilise également les colonnes précédentes de l'index pour faire correspondre des valeurs statiques. (Pour qu'un index FULLTEXT soit utile à une requête, celle-ci doit utiliser les colonnes de l'index en partant de la gauche. tous colonnes de l'index).

158voto

tpdi Points 18427

Tous ces éléments sont des sortes d'indices.

primaire : doit être unique, est un index, est (probablement) l'index physique, peut être seulement un par table.

unique : comme il est dit. Vous ne pouvez pas avoir plus d'une ligne avec un tuple de cette valeur. Notez que puisqu'une clé unique peut être sur plus d'une colonne, cela ne signifie pas nécessairement que chaque colonne individuelle dans l'index est unique, mais que chaque combinaison de valeurs sur ces colonnes est unique.

l'index : s'il n'est pas primaire ou unique, il ne contraint pas les valeurs insérées dans la table, mais il permet de les rechercher plus efficacement.

texte intégral : une forme plus spécialisée d'indexation qui permet la recherche plein texte. Il s'agit (essentiellement) de créer un "index" pour chaque "mot" de la colonne spécifiée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X