Les colonnes font généralement de bons index?
Suivi de "Quels sont les indices et comment puis-je les utiliser pour optimiser les requêtes dans ma base de données?" où suis-je tente d'apprendre sur les index, les colonnes sont un bon indice de candidats? Spécifiquement pour une base de données MS SQL?
Après quelques recherches sur google, tout ce que j'ai lu suggère que les colonnes qui sont généralement à la hausse et unique de faire un bon indice (des choses comme MySQL auto_increment), je comprends cela, mais je suis à l'aide de MS SQL et je suis en utilisant le Guid pour les clés primaires, il semble donc que les indices ne bénéficierait pas GUID colonnes...
Vous devez vous connecter pour publier un commentaire.
Indices peuvent jouer un rôle important dans l'optimisation de la requête et de la recherche les résultats rapidement sur les tables. C'est donc l'étape la plus importante pour sélectionner les colonnes à être indexé. Il existe deux principaux lieux où l'on peut envisager d'indexation: les colonnes référencées dans la clause where et les colonnes utilisées dans les clauses JOIN. Bref, ces colonnes doivent être indexés en fonction de qui vous êtes nécessaire à la recherche des documents particuliers. Supposons, nous avons une table nommée acheteurs où la requête SELECT utilise les index comme ci-dessous:
Depuis "buyer_id" est référencé dans la partie SELECT, MySQL de ne pas utiliser de limiter les choisi de lignes. Par conséquent, il n'y a pas besoin de l'indexer. Ci-dessous est un autre exemple un peu différent de ci-dessus, on:
Selon les au-dessus des requêtes first_name, last_name les colonnes peuvent être indexés comme ils sont situés dans la clause where. Aussi un champ supplémentaire, country_id from pays de table, peuvent être considérés pour l'indexation, car il est dans une clause de JOINTURE. Afin d'indexation peut être considéré comme sur tous les champs dans la clause where ou d'une clause de JOINTURE.
La liste suivante propose également quelques conseils que vous devez toujours garder à l'esprit lorsque l'intention de créer des index dans vos tables:
Mise À Jour (23 Feb'15):
Un index (bon/mauvais) augmente d'insertion et de temps de mise à jour.
En fonction de votre index (nombre d'index et le type), le résultat est recherché. Si votre temps de recherche va augmenter en raison de l'indexation puis c'est un mauvais indice.
Probablement dans un livre, "Page d'Index" aurait pu être le début d'un chapitre de la page, rubrique numéro de la page commence, également sous la rubrique page de démarrage. Quelques précisions en page d'Index d'aide, mais plus détaillée de l'indice pourrait vous confondre ou vous effrayer. Les index sont également d'avoir de la mémoire.
La sélection d'Index doit être sage. Gardez à l'esprit de ne pas toutes les colonnes nécessiterait d'index.
WHERE
,JOINS
ouHAVING
?WHERE
clause de je suis la vérification de la valeur d'un champ où sa colonne ne peut prendre que deux valeurs, puis je devrais indice de colonne binaire? Cela semble mauvais.Certaines personnes répondu à une question similaire ici: Comment savez-vous ce qu'est un bon indice de l'est?
Fondamentalement, cela dépend vraiment de la façon dont vous serez l'interrogation des données. Vous voulez un indice qui permet d'identifier rapidement un petit sous-ensemble de votre jeu de données qui sont pertinentes pour une requête. Si vous n'avez jamais requête par datestamp, vous n'avez pas besoin d'un index sur elle, même si c'est surtout unique. Si tout ce que vous faire est d'obtenir événements qui s'est passé dans une certaine plage de dates, vous voulez certainement une. Dans la plupart des cas, un indice sur le sexe est inutile-mais si tout ce que vous faire est d'obtenir des statistiques sur tous les hommes, et séparément, à propos de toutes les autres femmes, il pourrait être utile de votre temps à en créer un. Comprendre ce que votre requête tendances, et l'accès à de paramètre qui rétrécit l'espace de recherche le plus, et c'est votre meilleur indice.
Également tenir compte du type d'index que vous prenez, B-arbres sont bonnes pour la plupart des choses et de permettre les requêtes d'intervalle, mais hash index vous obtenir directement au point (mais ne permettent pas de plages). D'autres types d'indices ont d'autres avantages et les inconvénients.
Bonne chance!
Tout dépend sur quelles requêtes vous attendons à poser sur les tables. Si vous demandez pour toutes les lignes avec une certaine valeur pour la colonne X, vous devrez faire un full table scan si un index ne peut pas être utilisé.
Index sera utile si:
la colonne.
Ils ne seront pas utiles si:
Colonnes de clé primaire sont généralement idéal pour l'indexation, parce qu'ils sont uniques et sont souvent utilisés pour la recherche de lignes.
En général (je n'utilise pas mssql ne peut donc pas commenter spécifiquement), des clés primaires faire de bons indices. Ils sont uniques et doivent avoir une valeur spécifiée. (Aussi, des clés primaires faire bon indices qu'ils ont normalement un index créé automatiquement.)
Un index est effectivement une copie de la colonne qui a été triées pour permettre binaire de recherche (ce qui est beaucoup plus rapide que la recherche linéaire). Systèmes de base de données peut utiliser différentes astuces pour accélérer la recherche encore plus, en particulier si les données est plus complexe qu'un simple numéro.
Ma suggestion serait de ne pas utiliser les indices de l'origine et du profil de vos requêtes. Si une requête particulière (telles que la recherche des gens par leur nom de famille, par exemple) est exécuté très souvent, essayez de créer un index sur les relevate attributs de profil et de nouveau. Si il est un notable de la vitesse sur les requêtes et un nombre négligeable de ralentissement sur les insertions et mises à jour, garder l'index.
(Toutes mes excuses si je répète des trucs mentionnés dans votre autre question, je n'avais pas rencontré auparavant.)
Toute colonne qui va être régulièrement utilisé pour extraire des données à partir de la table doit être indexé.
Cela comprend:
les clés étrangères -
descriptif des champs -
Les colonnes n'ont pas besoin d'être unique. En fait, vous pouvez obtenir de très bonnes performances à partir d'un index binaire lors de la recherche pour les exceptions.
Cela dépend vraiment de vos requêtes. Par exemple, si vous presque uniquement écrire dans une table, puis il est préférable de ne pas avoir tout les indices, ils ont juste ralentir l'écrit et jamais utilisé. Toute la colonne que vous utilisez pour jointure avec une autre table est un bon candidat pour un index.
Aussi, lisez à propos de la fonctionnalité d'Index Manquants. Il surveille le réel les requêtes utilisées à l'encontre de votre base de données et peuvent vous dire ce que les index aurait amélioré les performances.
Colonne GUID n'est pas le meilleur candidat pour l'indexation. Les index sont les mieux adaptés pour les colonnes avec un type de données qui peut être donné un certain ordre significatif, c'est à dire triés (entier, la date, etc).
Il n'a pas d'importance si les données dans une colonne est généralement à la hausse. Si vous créez un index sur la colonne, l'indice de créer sa propre structure de données qui permet de référencer les articles réels dans votre table sans se soucier stockée ordre (un index non-cluster). Par exemple, une recherche binaire peut être réalisée sur votre indice de structure de données pour fournir une récupération rapide.
Il est également possible de créer un index cluster" qui sera physiquement modifier l'ordre de vos données. Cependant, vous ne pouvez avoir un de ces par table, alors que vous pouvez avoir plusieurs index non cluster.
Votre clé primaire doit toujours être un indice. (Je serais surpris si ce n'était pas indexé automatiquement par MS SQL, en fait.) Vous devez également les colonnes d'index vous
SELECT
ouORDER
par de fréquentes; leur but est à la fois une fonction de recherche rapide d'une valeur unique et trier plus rapidement.Le seul réel danger pour l'indexation des
too
nombre de colonnes est de ralentir les changements de lignes dans les tables de grande taille, comme les indices tous besoin de la mise à jour de trop. Si vous n'êtes vraiment pas sûr de ce que l'index, juste le temps de votre plus lent requêtes, regardez ce que les colonnes sont utilisées le plus souvent, et de les indexer. Puis voir comment beaucoup plus rapide qu'ils sont.Types de données numériques qui sont ordonnés dans l'ordre croissant ou décroissant, sont de bons indices pour de multiples raisons. D'abord, les chiffres sont généralement plus rapides à évaluer que des chaînes de caractères (varchar, char, nvarchar, etc). Deuxièmement, si vos valeurs ne sont pas commandés, les lignes et/ou les pages doivent être mélangées à mettre à jour votre index. C'est une charge supplémentaire.
Si vous utilisez SQL Server 2005 et mis sur l'utilisation de uniqueidentifiers (guid), et n'ont PAS besoin qu'ils soient de nature aléatoire, découvrez le séquentiel de type uniqueidentifier.
Enfin, si on parle d'index en cluster, vous parlez de la sorte de la physique des données. Si vous avez une chaîne de caractères comme votre index cluster, qui pourrait devenir laid.
Il devrait être encore plus rapide si vous utilisez un GUID.
Supposons que vous avez les enregistrements
Si vous avez un indice(binaire de recherche, vous pouvez trouver l'emplacement physique de l'enregistrement que vous recherchez en O( lg n) le temps, au lieu de chercher de manière séquentielle O(n) fois. C'est parce que vous ne savez pas quels sont les documents que vous avez en vous la table.
L'ol " règle du pouce a été colonnes qui sont beaucoup utilisés dans le where, ORDER BY, et les clauses GROUP BY, ou l'un semblait être utilisés dans les jointures fréquemment. Gardez à l'esprit que je suis se référant à l'index, PAS de Clé Primaire
De ne pas donner un "vanille-ish" réponse, mais cela dépend vraiment de la façon dont vous accédez à des données
Meilleur indice dépend du contenu de la table et de ce que vous essayez d'accomplir.
Pris un exemple Un membre de la base de données avec une Clé Primaire des Membres de la Sécurité Sociale Numnber. Nous avons choisi la S. S. en raison de l'application priamry renvoie à l'individu de cette façon, mais vous aussi vous souhaitez créer une fonction de recherche qui utilisent les membres du prénom et du nom. Je puis vous suggérons de créer un index sur ces deux champs.
Vous devez d'abord savoir ce que les données vous seront interrogation et ensuite déterminer quel type de données vous devez indexés.