Afficher la fragmentation des index d'une base de données


Requête permettant d'afficher la fragmentation des index d'une base de données.
SELECT 
	S.[name]					AS 'Schema',
	T.[name]					AS 'Table',
	I.[name]					AS 'Index',
	ROUND(P.[avg_fragmentation_in_percent],0)	AS '%',
	P.[page_count]					AS 'Nombre de pages'
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS P
INNER JOIN sys.tables	AS T	ON T.[object_id] = P.[object_id]
INNER JOIN sys.schemas	AS S	ON T.[schema_id] = S.[schema_id]
INNER JOIN sys.indexes	AS I	ON I.[object_id] = P.[object_id] AND P.[index_id] = I.[index_id]
WHERE P.[database_id] = DB_ID()
ORDER BY P.[avg_fragmentation_in_percent] desc

Lister les tables d'un base de données en comptant les lignes


Voici une petite requête qui utilise les tables systèmes pour lister les tables d'un base de données, en comptant les lignes et les colonnes :
SELECT 
	 T.[name]		AS 'Nom de la table'
	,T.[max_column_id_used]	AS 'Nombre de colonnes'
	,P.[row_count]		AS 'Nombre de lignes'
FROM sys.tables T
INNER JOIN sys.dm_db_partition_stats AS P ON P.[object_id] = T.[object_id]
WHERE P.[index_id] BETWEEN 0 AND 1
  AND T.[name] NOT IN ('dtproperties','sysdiagrams')
ORDER BY T.[name] ASC

Échappement des caractères underscore et pourcentage dans la clause LIKE


Dans SQL Server, la clause LIKE permet une recherche à partir d'une expression. Le caractère "_" est utilisé comme indiquant que l'on accepte n'importe quel caractère à la place du "_".
Par exemple :
SELECT * FROM MaTable WHERE MaColonne LIKE 'A_Z'
Cette requête permet de sélectionner tous les enregistrement où MaColonne commence par A, suivi de n'importe quel caractère, et ensuite Z. Donc si MaColonne = 'ABZ', il sera sélectionné, par contre si MaColonne = 'ABBZ', il ne sera pas sélectionné.

Pour échapper les caractères % et _ dans la clause LIKE, il faut les entourer de [ ]. Par exemple, 'T[_][%]A%' permettra de rechercher les chaînes commençant par 'T_%A'.

CREATE INDEX failed because the following SET options have incorrect settings: 'ARITHABORT'


Erreur :
CREATE INDEX failed because the following SET options have incorrect settings: 'ARITHABORT'. Verify that SET options are correct for use with indexed views and/or indexes on computed columns and/or filtered indexes and/or query notifications and/or XML data type methods and/or spatial index operations.
Cette erreur provient généralement d'une base de données SQL Server 2000 que l'on a migré vers une version plus récente. Pour ne plus avoir cette erreur, vérifier les valeurs des paramètres suivants :
  • Properties > Options > Compatibility level = SQL Server 2000 (80) ?
  • Properties > Options > Arithmetic Abort Enabled = False ?
Si ces deux paramètres ont ces valeurs, il faut mettre à jour votre base de données. Généralement, passer à un niveau de compatibilité "SQL Server 2008 (100)" suffit. Mais si ce n'est pas le cas, vous pouvez tester avec le second paramètre à "True".

1 2 ... 17