Les index et les multi colonnes de clés primaires
Suis parti à la recherche et n'ai pas trouvé la réponse à cette question de noob. Toutes mes excuses si je l'ai raté.
Dans une base de données MySQL, j'ai un tableau avec les éléments suivants clé primaire
Id de CLÉ PRIMAIRE (facture, élément)
Dans mon application, je vais aussi souvent de choisir le "point" par lui-même et moins fréquemment sur uniquement "facture". Je suppose que je voudrais bénéficier d'indices sur ces colonnes.
MySQL ne se plaint pas quand je définissez les paramètres suivants:
INDEX (facture),
INDEX (item),
Id de CLÉ PRIMAIRE (facture, élément)
Mais je ne vois pas de preuve (à l'aide de DÉCRIRE -- la seule façon que je sais comment chercher) que les indices distincts ont été établis pour ces deux colonnes.
Donc la question est, sont les colonnes qui composent une clé primaire automatiquement indexés individuellement? Aussi, est-il une meilleure façon de le DÉCRIRE pour explorer la structure de ma table?
- Merci à chacun de vous. Comme d'habitude, la grande information à partir d'un vraiment généreux de la communauté. Les réponses semblent se concentrer sur le tri vs la sélection. Sont les indices tout aussi important pour la sélection? Je vais être en utilisant des instructions select qui sera de retour entre 1 et ~10 lignes. Dans ma situation, l'ordre ne fera pas la matière.
- les indices sont de plus en plus important pour la sélection lors de la requête retourne quelques lignes, et de plus en plus important pour le tri lorsque les requêtes de retour, le nombre de lignes... de tri de 10 lignes est trivial. les trouver est dur. Si la requête retourne l'ensemble de la table (ou une partie substantielle de celui-ci) puis la recherche de lignes n'est pas un problème, mais le tri du grand jeu de résultats est...
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas intimement familier avec le fonctionnement interne des indices sur mySql, mais sur la base de données deux produits du vendeur, que je connais bien (MsSQL, Oracle) les indices sont en équilibre-les structures en Arbre, dont les nœuds sont organisés en tant que séquence n-uplet des colonnes de l'index est défini sur (Dans la Séquence Définie)
Donc, à moins que mySql fait très différemment, (probablement pas), aucun indice composite (sur plus d'une colonne) peut être utilisable par toute requête qui a besoin de filtrer ou trier par un sous-ensemble des colonnes de l'index, aussi longtemps que la liste des colonnes est compatible, c'est à dire, si les colonnes, quand séquencé le même que le séquencé liste des colonnes de l'index complet, est d'un ordre sous-ensemble de l'ensemble des colonnes de l'index, qui commence au début de l'indice réel de la séquence, sans lacunes, sauf à la fin...
En d'autres termes, cela signifie que si vous avez un index sur (a,b,c,d) une requête qui filtre (a), (a,b), ou (a,b,c) peuvent également utiliser l'index, mais une requête qui doit filtre (b) ou (c) ou (b,c) ne sera pas en mesure d'utiliser l'index...
Donc dans votre cas, si vous avez souvent besoin de filtre ou de tri sur la colonne élément seul, vous devez ajouter un autre index sur cette colonne par lui-même...
Personnellement, j'utilise phpMyAdmin d'afficher et de modifier la structure des bases de données MySQL. C'est une application web, mais il fonctionne assez bien sur un serveur web local (je exécuter une instance d'apache sur mon ordinateur et phpPgAdmin).
Comme pour la clé composite de
(invoice, item)
, il agit comme un indice pour(invoice, item)
et pourinvoice
. Si vous souhaitez indexer par justeitem
il faut ajouter celui de l'indice de soi-même. Votre PK seront triés parinvoice
puis paritem
oùinvoice
est la même dans de multiples dossiers. Alors que l'ordre dans un composite PK n'a pas d'importance pour l'unicité de l'exécution, il n'est question pour l'accès.Sur votre tableau je voudrais utiliser:
De retour index de la table information, vous pouvez utiliser:
Voir: http://dev.mysql.com/doc/refman/5.0/en/show-index.html
Pour afficher les informations de la table:
Voir: http://dev.mysql.com/doc/refman/5.0/en/show-create-table.html
Clés primaires sont des indices, donc il n'y a pas besoin de créer d'autres indices. Vous pouvez trouver plus d'informations à leur sujet en vertu de la
CREATE TABLE
syntaxe (il y a trop à insérer ici):http://dev.mysql.com/doc/refman/5.0/en/create-table.html
Je ne suis pas familier avec MySQL, mais en général, un index multi-colonnes est également utile sur la première colonne de l'index un index sur cette colonne seule. Les index multi-colonnes devient de moins en moins utile pour exécuter des requêtes sur une seule colonne de la poursuite de la colonne apparaît dans l'index.
Cela fait un certain sens si vous pensez que le multi-index de colonne comme une hiérarchie. La première colonne de l'index est que la racine de la hiérarchie, de sorte que la recherche c'est juste une question de contrôle de premier niveau. Cependant, pour l'analyse de la deuxième colonne, la base de données a pour consulter l'arborescence pour chaque valeur unique trouvé dans la première colonne. Cela peut être assez coûteux que la plupart des optimiseurs ne vais pas la peine de regarder profondément dans un index multi-colonne, plutôt que d'opter pour le plein-table-scan.
Par exemple, si vous avez un tableau comme suit:
En supposant que vous avez un index sur les trois colonnes, dans l'ordre, l'arbre va ressembler à quelque chose comme ceci:
À la recherche pour Col1='A' est facile: vous n'avez qu'à regarder les 2 valeurs ordonnées. Toutefois, pour résoudre col3='X', vous avez à regarder toutes les valeurs dans les 4 plus grands seaux, chaque de ce qui est commandé individuellement.
Il y a une différence entre l'indice composite et clé primaire composite.
Si vous avez défini un indice composite comme ci-dessous
l'index ne fonctionnent pas si vous avez requête basée sur
item
et vous avez besoin d'ajouter un index séparéMais, si vous avez défini une clé primaire composite comme ci-dessous
l'index de travail si vous avez requête basée sur
item
et aucun index distinct est requis.De travail exemple:
Mysql auto de créer un index pour les clés composites. En fonction de vos requêtes que vous pourriez avoir à créer des index pour chaque colonne de la clé composée.
Si vous utilisez mysql workbench, vous pouvez manuellement, cliquez à droite sur le schéma et cliquez sur modifier pour voir le tout sur la table