5 votes

Comment utiliser un index dans une requête SQL

J'ai créé un index dans mon SP au début comme suit

Create Index index_fab
ON TblFab (Fab_name)

J'ai maintenant la question suivante

select fab_name from TblFab where artc = 'x' and atelr = 'y'.

now Est-il nécessaire d'utiliser ce nom d'index dans la clause de sélection ou sera-t-il automatiquement utilisé pour accélérer les requêtes ?

Dois-je utiliser quelque chose comme

select fab_name from TblFab WITH(INDEX(index_fab)) where artc = 'x' and atelr = 'y'.

ou toute autre méthode pour utiliser cet index dans une requête

Et comment utiliser l'index si nous utilisons la jointure sur cette table ?

9voto

Neville K Points 13666

Premièrement, voulez-vous dire que vous créez l'index dans une procédure stockée ? C'est une mauvaise idée - si vous exécutez la procédure stockée deux fois, elle échouera parce que l'index existe déjà.

Deuxièmement, votre requête n'utilise pas la colonne mentionnée dans l'index, elle n'aura donc aucun impact.

Troisièmement, comme l'écrit JodyT, l'analyseur de requêtes (SQL Server lui-même) décidera de l'index à utiliser ; il est presque certainement meilleur que vous dans ce domaine.

Enfin, pour accélérer la requête que vous mentionnez, créez un index sur les colonnes artc et atelr.

3voto

JodyT Points 3706

L'optimiseur de requêtes du serveur SQL décidera si l'index est adapté à la requête. Vous ne pouvez pas force pour utiliser un index spécifique. Vous pouvez donner des indications sur l'index que vous souhaitez qu'il utilise, mais cela ne garantit pas qu'il l'utilisera.

3voto

curiousBoy Points 569

Comme les autres personnes ont répondu à votre question pour vous aider à mieux comprendre, mon opinion est que vous devriez d'abord comprendre pourquoi vous avez besoin d'utiliser des index. Comme nous le savons, les index augmentent les performances, mais ils peuvent aussi causer des problèmes de performance. Il est préférable de savoir quand vous devez utiliser des index, pourquoi vous devez utiliser des index plutôt que comment utiliser des index.

Vous pouvez lire presque tous les détails de aquí .

En ce qui concerne votre exemple, l'index de votre requête n'a aucun impact. Parce qu'il n'y a pas la colonne mentionnée dans la clause where de votre requête.

Vous pouvez également essayer :

CREATE INDEX yourIndexName ON yourTableName (column_you_are_looking_for1,column_you_are_lookingfor2 )

Il est également bon de le savoir : Si aucun index n'existe sur une table, un balayage de la table doit être effectué pour chaque table référencée dans une requête de base de données. Plus la table est grande, plus le balayage est long, car il nécessite l'accès séquentiel à chaque ligne de la table. Bien qu'un balayage de table puisse être plus efficace pour une requête complexe qui nécessite la plupart des lignes d'une table, pour une requête qui ne renvoie que certaines lignes de la table, un balayage d'index peut accéder aux lignes de la table de manière plus efficace. (source de aquí )

J'espère que cela vous aidera.

2voto

DrCopyPaste Points 3028

Un index doit être utilisé par défaut si vous exécutez une requête sur la table qui l'utilise. Mais je pense que dans la requête que vous avez postée, il ne sera pas utilisé, parce que vous ne filtrez pas vos données par la colonne sur laquelle vous avez créé votre index. Je pense que vous devriez créer l'index pour les colonnes artc et atelr pour en profiter. Pour savoir si votre index est utilisé, regardez le plan d'exécution utilisé dans SQL Management Studio.

plus d'informations sur les indices : utiliser l'index luke

2voto

Il n'est pas nécessaire d'inclure l'index dans votre requête. Il est géré par le serveur SQL. Vous n'avez pas non plus besoin d'inclure l'index dans la sélection si vous voulez faire une jointure avec cette table. J'espère que c'est clair.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X