2009-05-07 5 views
1

Quelle approche avez-vous pour créer et maintenir des index de base de données lors de l'utilisation d'ORM tels que NHibernate/Hibernate.ORM et index de base de données

Puisque l'ORM génère les requêtes, y a-t-il des outils que vous pourriez recommander pour analyser les plans de requête de ceux-ci et suggérer le type d'index qui devrait être créé?

Mon approche actuelle est ... attendre que quelque chose fonctionne lentement et puis trouver la requête lente et l'optimiser ... mais c'est un peu boiteux n'est-ce pas? Mon but n'est pas de me retrouver avec des dizaines ou des centaines d'index dont personne ne sait lesquels sont réellement utilisés par le système et lesquels ne le sont pas. Donc encore une fois la maintenance de l'index.

Mon environnement est NHibernate + SQL Server 2005.

Répondre

1

Je trouve que les colonnes qui ont besoin d'indexation sont généralement « évidente ». Je veux dire par là que si vous créez des requêtes comme "sélectionnez p à partir de la personne p où p.surname =: nom de famille" alors tout nom de famille de colonne a besoin d'un index.

De même, chaque clé étrangère doit être indexée.

Et non, je n'attends pas que la performance soit réellement un problème. Les index sont juste quelque chose que je fais dès le début. Oh, l'autre chose que je voulais ajouter, c'est que la plupart des ORM (sinon tous) ont la possibilité d'activer la journalisation des instructions. Ceux-ci ne sont souvent pas particulièrement lisibles (une seule ligne, noms de table de t0, t1, t2, etc.) mais cela peut vous indiquer quelles requêtes ont été lancées et à quelle fréquence.

+0

Nous avons beaucoup de requêtes et cela n'a pas de sens de créer des index pour chaque champ "évident", car je ne veux pas finir par avoir des centaines d'index définis dans la base de données. Ce que je veux cependant, c'est indexer sur des choses qui sont réellement lentes ou utiliser des index combinés qui pourraient servir pour plusieurs requêtes plutôt que d'optimiser chaque requête séparément. Tout est dû au fait que chaque requête ne peut utiliser qu'un seul index par base de données lors de son exécution. –

+0

Cela aurait dû être un index par table, désolé. –

0

Les outils standard que vous utiliseriez pour analyser les requêtes lentes/mauvaise indexation s'appliquent que vous utilisiez ou non un ORM. Vous pouvez utiliser sql server profiler pour examiner les instructions sql qui s'exécutent sur votre base de données, puis utiliser les fonctionnalités du plan d'index dans la fenêtre de requête dans sql server management studio/sql query analyser pour voir les détails de vos plans de requête et avoir une idée de quels index vous devrez peut-être ajouter. Vous pouvez également utiliser l'Assistant Paramétrage du moteur de base de données dans sql management studio, bien que cet outil soit plus utile que de simplement réfléchir à la conception de votre base de données et à vos requêtes.