2010-10-05 7 views
1

J'ai une question, pourriez-vous m'aider s'il vous plaît? J'ai créé une base de données pour un web-cms, dans la table User_ qui comprend: UserID, Nom d'utilisateur, Mot de passe, Prénom, Nom, ... _ qui est le meilleur choix pour créer l'index, nom d'utilisateur ou Prénom et Nom de famille? Ou les deux? Par défaut, l'ID utilisateur est l'index clusterisé de la table utilisateur. L'index suivant doit donc être non clusterisé. Mais je ne suis pas sûr que UserID soit l'index clusterisé. Comme il s'agit d'un site Web et que de nombreux utilisateurs peuvent s'enregistrer ou supprimer leurs comptes tous les jours, est-ce un bon choix pour créer l'index clusterisé sur UserID? J'utilise sql server 2008conception d'index pour une base de données web-cms

+1

Je ne suis pas sûr de bien comprendre votre question, mais je considérerais facilement un index non clusterisé sur la combinaison Nom d'utilisateur/Mot de passe puisque ce sont les deux champs que vous interrogez lorsqu'un utilisateur se connecte. ] ON [Nom du fichier] ([Nom d'utilisateur], [Mot de passe]) Par ailleurs, vous devez modifier le nom de votre colonne Mot de passe, car Mot de passe est un mot réservé dans SQL. De plus, toutes les requêtes qui contiennent cette colonne n'apparaîtront pas dans Profiler puisque vous utilisez le mot «mot de passe». – Sage

+0

En outre, si vous ne demandez pas spécifiquement une colonne (par exemple: "Où [NomColonne] = 'Boo'"), je ne m'inquiéterais pas trop d'ajouter un index sur cette colonne. – Sage

Répondre

1

Vous devez définir des index clusterisés sur des champs qui sont souvent demandés de manière séquentielle ou qui contiennent un grand nombre de valeurs distinctes ou qui sont utilisés dans des requêtes de tables de joion. Donc, cela signifie généralement que la clé primaire est un bon candidat.

Les index non clusterisés sont bons pour les champs utilisés dans la clause where des requêtes. Décider sur quels champs vous créez des index est quelque chose de très spécifique à votre application. Si vous avez des requêtes très critiques qui utilisent les champs du prénom et du nom, alors je dirais oui, sinon ça ne vaudra pas la peine.

En termes de personnes supprimant leurs comptes, je suis sûr que vous n'avez pas l'intention de supprimer la ligne de la table. Habituellement, vous venez de les marquer comme inactifs, car qu'arrive-t-il à toutes les autres tables liées qui peuvent être affectées par cet utilisateur?

Questions connexes