Sql Server : Quelques astuces pour optimiser vos requêtes

Voici quelques astuces qui peuvent aider à optimiser vos requêtes sql.

1- Parmi les colonnes se trouvant dans la clause SELECT ne doivent êtres présentent uniquement les colonnes nécessaires. chaque colonnes de la requête nécessite des opérations I/O et de la bande passante.

2 – L’utilisation du SELECT * FROM … est très fortement déconseillé.

2- Seule les lignes nécessaires doivent être retournées. Ne pas faire retourner 10000 lignes par l’application alors que l’on a besoins de voir uniquement les 10 ères. (exemple d’un datagrid paginé).
La fonction ROWNUMBER permet de faire de la pagination en tsql.
Plus d’infos sur cette fonction ici: http://msdn.microsoft.com/fr-fr/library/ms186734.aspx

3- Ne pas utiliser le DISTINCT ou UNION si l’unicité n’est pas nécessaire.

4- Dans le cas d’utilisation d’un CURSEUR, pensez à le fermer et  le désalouer le plus tôt possible.

5- L’utilisation des Procédures stockés est recommandée, surtout si le temps d’exécution d’une requête n’est pas prédit.
Les procédures stockés ont l’avantage d’avoir un temps d’execution fiable, car leur exécution ne demandent pas de recompilation.
Plus d’infos ici: http://www.codeproject.com/Articles/414272/Stored-Procedures-DO-NOT-increase-performance

6- Utiliser des procédures stockés ou des vus au lieu des requêtes direct, afin d’alléger la bande passante.

7- Dans les procédures stockés mettre la commande SET NOCOUNT ON , afin de ne pas faire afficher le nombre de ligne affectés et ainsi alléger la bande passante.

8- L’utilisation de contrainte est plus recommandée que les Trigers

9- Utilisation de tables variable sont plus performante que les tables temporaires.

10- L’utilisation du UNION ALL est plus performant que le UNION car le UNION fait un traitement supplémentaire pour exclure pas les doublons.

11- Dans le cas d’une requete CTE (hierachie), dans le With n’utiliser uniquement les colonnes nécessaires à la boucle. Le reste des colonnes pourra être dans le SELECT final.

12- Ne pas utiliser de COUNT() d’agrégation dans une sous-requete pour faire un test d’existence.
Utiliser :
SELECT [colonnes] FROM table WHERE EXISTS (SELECT * FROM table2 WHERE …)

Au lieu de:
SELECT [colonnes] FROM table WHERE 0 < (SELECT count(*) FROM table2 WHERE ..)

13-Lors de jointures, les colonnes qui servent à la jointure doivent être de type identique.

14- A la place de la commande LIKE , utiliser l’indexation full-text qui permet une meilleur performance pour les recherches textuelles.
Plus d’infos : http://blog.developpez.com/sqlpro/p9344/langage-sql-norme/indexation_textuelle_full_text_search_no

15- Privilégier les types de colonnes varchar(max), varbinary(max) et nvarchar(max) au lieu du type TEXT.

Une réflexion sur “Sql Server : Quelques astuces pour optimiser vos requêtes

  1. Liste d’astuce qui semble évident pour les développeurs expérimentés mais qui sont toujours bon à expliqué, d’autant plus pour promouvoir les bonnes pratiques auprès des jeunes développeurs.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s