SQL: qu'est-ce exactement faire des Clés Primaires et des Index de faire?
J'ai récemment commencé à développer ma première application qui utilise une base de données SQL, et je suis en utilisant phpMyAdmin pour configurer les tables. Il y a un couple en option "fonctions", je peux donner des différentes colonnes, et je ne suis pas entièrement sûr de ce qu'ils font:
- Clé Primaire
- Indice
Je sais ce qu'est un PK et comment l'utiliser, mais je suppose que ma question est pourquoi a-t-on besoin d'un comment est-il différent de se contenter de placer une colonne de "Uniques", autre que le fait que vous ne pouvez avoir qu'un PK? Est-il juste de laisser le programmeur sait que cette valeur identifie de façon unique l'enregistrement? Ou faut-il avoir certaines propriétés spéciales trop?
Je n'ai aucune idée de ce que "l'Index" n' - en fait, la seule fois où j'ai jamais vu ça en cours d'utilisation sont (1) que mes clés primaires semblent être indexé, et (2) j'ai entendu dire que l'indexation est en quelque sorte lié à la performance, que vous voulez des colonnes indexées, mais pas trop. Comment choisir les colonnes à l'index, et que fait-il?
edit: devrait un index de colonnes est probablement souhaitez COMMANDER PAR?
Merci beaucoup,
Mala
Vous devez vous connecter pour publier un commentaire.
Clé primaire est généralement utilisé pour créer un numérique 'id' pour vos dossiers, et cette colonne id est automatiquement incrémenté.
Par exemple, si vous avez un
books
table avec uneid
terrain, où leid
est la clé primaire et est également mis àauto_increment
(Sous "Supplémentaire dans phpmyadmin), puis quand vous ajoutez d'abord un livre de la table, l'id qui va devenir 1'. Le prochain livre de l'id serait automatiquement '2', et ainsi de suite. Normalement, chaque table doit avoir au moins une clé primaire pour aider à l'identification et la recherche des enregistrements facilement.Index sont utilisés lorsque vous avez besoin de récupérer certaines informations à partir d'une table régulièrement. Par exemple, si vous avez un
users
table, et vous aurez besoin pour accéder à laemail
colonne d'un lot, vous pouvez ajouter un index sur e-mail, et ce sera la cause de requêtes d'accès à l'e-mail pour être plus rapide.Cependant il y a aussi des inconvénients pour l'ajout inutile index, pour ajouter ce uniquement sur les colonnes qui doivent vraiment être plus consultés que les autres. Par exemple,
UPDATE
,DELETE
etINSERT
requêtes sera un peu plus lent plus les indices que vous avez, en tant que MySQL a besoin de stocker des informations supplémentaires pour chaque colonne indexée. Plus d'informations peuvent être trouvées à cette page.Edit: Oui, les colonnes qui doivent être utilisés dans
ORDER BY
un lot doit avoir des indices, ainsi que ceux utilisés dansWHERE
.La clé primaire est essentiellement une unique colonne indexée qui sert de "officielle" de l'ID de lignes dans cette table. Plus important encore, il est généralement utilisé pour les relations de clé étrangère, c'est à dire si un autre tableau se réfère à une ligne dans le premier, il contiendra une copie de la ligne de la clé primaire.
Notez qu'il est possible d'avoir une clé primaire composite, c'est à dire celui qui se compose de plus d'une colonne.
Indices d'améliorer les temps de recherche. Ils sont généralement basées sur les arbres, ainsi que de la recherche d'un certain rang, par le biais d'un indice prend O(log(n)), plutôt que d'analyser à travers l'intégralité de la table.
Généralement, n'importe quelle colonne dans une table de grande taille qui est fréquemment utilisé dans
WHERE
,ORDER BY
ou (et surtout)JOIN
clauses doivent avoir un indice. Depuis l'index doit être mis à jour pour eveyINSERT
,UPDATE
ouDELETE
, il ralentit ces opérations. Si vous avez quelques écritures et beaucoup de lectures, alors l'index de votre entendre du contenu. Si vous avez beaucoup d'écritures et beaucoup de requêtes qui nécessiterait des index sur plusieurs colonnes, alors vous avez un gros problème.La différence entre une clé primaire et une clé unique est mieux expliqué par un exemple.
Nous avons une table d'utilisateurs:
Dans ce tableau le USER_ID est la clé primaire. Le NOM n'est pas unique, il y a beaucoup de John Smiths et Muhammed Khans dans le monde. L'e-MAIL est nécessairement unique, sinon le monde entier système de courrier électronique ne fonctionne pas. Nous avons donc mis une contrainte unique sur e-MAIL.
Pourquoi alors avons-nous besoin d'un clé primaire? Trois raisons:
lorsque utilisé dans la clé étrangère
les relations qu'il prend moins d'espace
la permutation de fournisseur), mais l'utilisateur est
toujours le même; l'ondulation d'un changement de
une valeur de clé primaire à travers un schéma
est toujours un cauchemar
des informations confidentielles ou privées comme
une clé étrangère
Dans le modèle relationnel, une colonne ou un ensemble de colonnes qui est garanti pour être à la fois présent et unique dans la table peut être appelé une clé candidate à la table. "Présent" signifie "not NULL". C'est une pratique courante dans la conception de base de données pour désigner le candidat à la clé comme clé primaire, et d'utiliser des références à la clé primaire pour désigner l'ensemble de la ligne, ou à l'objet de l'élément de la ligne décrit.
En SQL, une contrainte de CLÉ PRIMAIRE constitue une contrainte not NULL pour chaque colonne de la clé primaire, et une contrainte UNIQUE pour toutes les colonnes de clé primaire prises ensemble. Dans la pratique, de nombreuses clés primaires à son tour d'être seul colonnes.
Pour la plupart des produits de SGBD, une contrainte de CLÉ PRIMAIRE se traduira également par un index sur les colonnes de clé primaire automatiquement. Cela accélère les systèmes de vérification de l'activité, quand les nouvelles entrées sont faites pour la clé primaire, assurez-vous que la nouvelle valeur n'est pas dupliquer une valeur existante. Il accélère les recherches basées sur la valeur de la clé primaire et les jointures entre la clé primaire et de clé étrangère qui fait référence à elle. Combien de vitesse jusqu'se produit dépend de la façon dont l'optimiseur de requête fonctionne.
À l'origine, la base de données relationnelle concepteurs se sont penchés sur des clés naturelles dans les données comme données. Au cours des dernières années, la tendance a été de toujours créer une colonne appelée ID, un entier comme la première colonne et la clé primaire de chaque table. Le son caractéristique du SGBD est utilisé pour s'assurer que cette clé sera unique. Cette tendance est documentée dans le "Oslo normes de conception". Il n'est pas nécessairement relationnelle de la conception, mais il sert à certains besoins immédiats des personnes qui le suivent. Je ne recommande pas cette pratique, mais je reconnais que c'est de la persistance de la pratique.
Un index est une structure de données qui permet un accès rapide en quelques lignes dans une table, basée sur une description des colonnes de la table qui sont indexés. L'indice est composé de copies de certaines colonnes d'un tableau, appelé clés d'index, intercalés avec des pointeurs vers les lignes de la table. Les pointeurs sont généralement cachés de la SGBD utilisateurs. Les indices de travailler en tandem avec l'optimiseur de requête. L'utilisateur spécifie dans quelles données SQL est demandé, et l'optimiseur vient avec l'indice de stratégies et d'autres stratégies pour la traduction de ce qui est recherché dans une stratégie pour la trouver. Il y a une sorte de principe d'organisation, telles que le tri ou le hachage, qui permet à un index pour être utilisé rapidement des recherches, et de certains autres utilisations. C'est tout interne pour le SGBD, une fois la base de données constructeur a créé l'index ou déclaré la clé primaire.
Index peut être construit qui n'ont rien à faire avec la clé primaire. Une clé primaire peut exister sans un indice, même si c'est généralement une très mauvaise idée.