2009-10-18 9 views
3

Je suis un type SQL Server qui expérimente MySQL pour un grand projet à venir (en raison de licences) et je ne trouve pas beaucoup d'informations sur la façon de créer une clé primaire sans index clusterisé. Toute la documentation que j'ai lue dit sur 5.1 dit qu'une clef primaire est automatiquement donnée à un index groupé. Comme j'utilise un binaire (16) pour la colonne de la clé primaire (GUID), je préfère ne pas avoir d'index clusterisé dessus. Donc ...Créer une clé primaire mysql sans index clusterisé?

  1. Est-il possible de créer une clé primaire sans index clusterisé? Je pourrais toujours mettre l'index en cluster sur la colonne date_created à la place, mais comment empêcher mysql de créer l'index en cluster sur la clé primaire automatiquement?
  2. Si ce n'est pas possible, serai-je OK sur le plan des performances avec un index unique sur la colonne GUID et aucune clé primaire sur la table? Je prévois d'utiliser nhibernate ici, donc je ne suis pas sûr que l'absence de clé primaire soit autorisée (pas encore si loin).

Répondre

2

Considérant ce qui est dit sur 13.6.10.1. Clustered and Secondary Indexes, il semble que vous ne pouvez pas vraiment définir sur quelle colonne l'index cluster est défini:

  • il est soit sur la colonne PK
  • ou sur la première colonne avec un index UNIQUE qui n'a que des valeurs non nulles
  • ou sur une colonne interne - pas dans votre cas USEFULL ^^

à propos de la deuxième question dans votre message: pas PK sur la table et un index UNIQUE sur le GUID; c'est peut-être possible, mais cela ne changera rien à l'index clusterisé: il sera probablement dans la colonne GUID.


Une sorte d'un hack peut-être à:

  • définit pas une clé primaire
  • place un index unique sur votre champ date_created (si vous ne créez pas trop de lignes dans de courtes périodes de temps, il pourrait être viable ...)

Je ne sais pas, vous pouvez placer un second index unique sur le GUID ... peut-être ^^
Et pas sûr que changeriez beaucoup sur le clus indexé; mais peut-être vaut la peine d'essayer ...

3

Cela dépend du moteur de stockage que vous utilisez. Les tables MyISAM ne prenant pas en charge les index clusterisés, les clés primaires des tables MyISAM ne sont pas clusterisées. La clé primaire sur une table InnoDB, cependant, est en cluster.

Vous devez indiquer consult the MySQL Manual pour plus de détails sur les avantages et les inconvénients de chaque moteur de stockage.

Vous devez avoir une clé primaire; Si vous n'en créez pas vous-même, MySQL en créera une cachée. Vous pouvez toujours créer un champ AUTO_INCREMENT pour la clé primaire (c'est préférable que MySQL ait des champs cachés dans votre table, je pense).

Questions connexes