# Microsoft SQL Server/Performances

* Introduction
* Bases de données
* Gestion des utilisateurs
* Variables
* Tables
* Procédures stockées
* Fonctions
* Bases de données spatiales
* Performances
* Importer et exporter
* SugarCRM

## Annexes

* Mots réservés
* Problèmes connus
* Introduction
* Bases de données
* Gestion des utilisateurs
* Variables
* Tables
* Procédures stockées
* Fonctions
* Bases de données spatiales
* Performances
* Importer et exporter
* SugarCRM

## Annexes

* Mots réservés
* Problèmes connus
[ Modifier le sommaire ]

## Optimisation de requêtes

Les hints ou indicateurs permettent d'optimiser les transactions pour arriver au même résultat plus rapidement avec moins de ressources.
Pour comparer ceux-ci, il suffit de lancer dans le menu Requête, Afficher le plan d'exécution estimé.
Lors d'une exécution via SQL Studio, le bouton "include le plan d'exécution réel" permet de voir si l'ordre des opérations est le plus judicieux (généralement on procède par projection, puis sélection et jointure). Ce plan peut être enregistré en XML, au format .sqlplan.
Les hints sont stipulés à la fin de la requête, avec les clauses WITH ou OPTION entre parenthèses.

### Plan d'exécution

Le plan d'exécution d'une requête peut s'affiche sous son résultat en l'activant ainsi :

### Index

Il existe plusieurs types d'indexation des tables sur MSSQL :
* index unique : index appliqué sur une clé candidate. On le crée avec la clause CREATE UNIQUE INDEX ;
* index non-cluster : index par défaut si aucun n'est précisé (CREATE INDEX = CREATE NONCLUSTERED INDEX) ;
* index cluster : particularité de Microsoft SQL Server qui stocke les données dans les feuilles de l'arbre. L'ordre physique correspond donc à l'ordre logique des enregistrements ;
* index XML primaire : pour les balises XML ;
* index spatial : pour les bases de données spatiales ;
* index columnstore.
Pour savoir quel sont les index d'une table :

#### Création

Par convention on nommera les index avec un préfixe "IX_" :
Pour le type de données XML, il existe aussi CREATE XML SCHEMA COLLECTION.

#### Utilisation

Pour permettre à l'optimiseur de requêtes un élagage rapide des enregistrements à ne pas parcourir lors d'une sélection, il faut utiliser le ou les index les plus appropriés par rapport aux conditions (WHERE) :

#### Suppression
### Group by

GROUP BY avec ROLLUP, CUBE et GROUPING SETS.

## Réplication

Pour répliquer une base de données sur un autre serveur, il faut configurer une mise en miroir sur au moins trois serveurs : le principal, le miroir, et le témoin pour les contrôler. Il est déconseillé d'héberger l'instance du témoin sur les mêmes machines que les deux premiers. Toutefois si cela arrive, il faudra lui spécifier un port différent de celui par défaut (5022).

## Partitionnement

CREATE PARTITION SCHEME.

## Audits

Prévoir un audit trimestriel pour déterminer les requêtes les plus consommatrices.

## Références

* ↑ http://msdn.microsoft.com/fr-fr/library/ms187713%28v=sql.100%29.aspx
* ↑ https://msdn.microsoft.com/fr-fr/library/ms188783.aspx
* ↑ https://msdn.microsoft.com/fr-fr/library/ms190457.aspx
* ↑ https://msdn.microsoft.com/en-us/library/ms176009.aspx
* ↑ https://technet.microsoft.com/fr-fr/library/bb522495%28v=sql.105%29.aspx
* ↑ https://technet.microsoft.com/fr-fr/library/ms175191(v=sql.105).aspx
* ↑ https://msdn.microsoft.com/en-us/library/bb934097.aspx
* ↑ http://www.dbta.com/Editorial/Trends-and-Applications/Essential-Tips-on-SQL-Server-Database-Performance-108768.aspx