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

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

Différences

  • CLÉ ou INDEX fait référence à un index non unique normal. Les valeurs non distinctes pour l'index sont autorisées, donc l'index peut contiennent des lignes avec 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 l'accès - pour atteindre rapidement certaines plages d'enregistrements sans analyser tous les enregistrements.

  • UNIQUE fait référence à un index où toutes les lignes de l'index doivent être uniques. Autrement dit, la même ligne peut ne pas avoir de valeurs non NULL identiques pour toutes les colonnes de cet index comme une autre ligne. En plus d'être utilisés pour atteindre rapidement certaines plages d'enregistrements, 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 d'enfreindre la 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 autoriser l'application d'un index UNIQUE aux colonnes qui autorisent les valeurs NULL, auquel cas deux lignes sont autorisées à être identiques si elles contiennent toutes deux une valeur NULL (la raison ici est que NULL est considéré comme non égal à lui-même). En fonction de votre application, cependant, vous pouvez trouvez cela indésirable :si vous souhaitez empêcher cela, vous devez interdire les valeurs NULL dans les colonnes concernées.

  • PRIMAIRE agit exactement comme un index UNIQUE, sauf qu'il est toujours nommé 'PRIMARY', et qu'il ne peut y en avoir qu'un sur une table (et il devrait soyez toujours un; bien que certains systèmes de base de données ne l'appliquent pas). Un index PRIMARY est conçu comme un moyen principal d'identifier de manière unique n'importe quelle ligne de la table, donc contrairement à UNIQUE, il ne doit pas être utilisé sur les colonnes qui autorisent les valeurs NULL. Votre index PRIMARY doit être sur le plus petit nombre de colonnes suffisant pour identifier de manière unique une ligne. Souvent, il ne s'agit que d'une seule colonne contenant un numéro unique auto-incrémenté, mais s'il y a autre chose qui peut identifier de manière unique une ligne, comme "countrycode" dans une liste de pays, vous pouvez l'utiliser à la place.

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

  • TEXTE INTÉGRAL 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 avec la clause MATCH() / AGAINST(), contrairement aux trois ci-dessus - qui sont généralement implémentées en interne à l'aide de b-trees (permettant la sélection, le tri ou les plages à partir de la colonne la plus à gauche) ou tables de hachage (permettant la sélection à partir de la colonne la plus à gauche).

    Là où les autres types d'index sont à usage général, un index FULLTEXT est spécialisé, en ce sens qu'il sert un objectif étroit :il n'est utilisé que pour une fonctionnalité de "recherche plein texte".

Similarités

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

  • A l'exception de FULLTEXT, l'ordre des colonnes est important :pour que l'index soit utile dans une requête, la requête doit utiliser les colonnes de l'index en partant de la gauche - elle ne peut pas utiliser uniquement la deuxième, la troisième ou la quatrième partie d'un index, sauf s'il utilise également les colonnes précédentes de l'index pour faire correspondre les valeurs statiques. (Pour qu'un index FULLTEXT soit utile à une requête, la requête doit utiliser all colonnes de l'index.)