Bonjour,
J'ai terminé d'écrire une procédure stockée pour la maintenance automatisée des index, et je suis maintenant confronté à un petit problème.
Lorsque la procédure stockée tente de reconstruire un index :
- sur une table qui n'a aucune colonne de type LOB (pas de varchar(max), nvarchar(max), varbinary(max) ou xml)
- qui n'est pas un index filtré
- qui n'est pas sur une colonne calculée (la table n'en a pas)
- qui n'est pas sur une vue indexée
- qui n'est pas sur une colonne spatiale
La définition de l'index telle que scriptée par SSMS est la suivante, aux noms de colonne près :ALTER INDEX failed because the following SET options have incorrect settings: 'ANSI_WARNINGS'. 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.
L'instruction générée par la procédure stockée est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 USE [myDB] GO /****** Object: Index [IX_table__b__c__j__k] Script Date: 03/23/2012 16:05:47 ******/ CREATE NONCLUSTERED INDEX [IX_table__b__c__j__k] ON [dbo].[table] ( [b] ASC, [c] ASC, [j] ASC, [k] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO
Le type de données des colonnes b, c et j est uniqueidentifier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ALTER INDEX [IX_table__b__c__j__k] ON myDB.dbo.table REBUILD WITH (ONLINE = ON, FILLFACTOR = 100)
La colonne d est une datetime. Au total, la clé fait donc 3 x 16 + 8 = 56 octets.
J'ai supprimé l'index puis je l'ai créé (c'est à dire que je n'ai pas utilisé l'option DROP_EXISTING = ON de CREATE INDEX), mais rien n'y fait.
Le script de la table tel que généré par SSMS, aux noms de colonne près est le suivant :
Quelqu'un a-t-il une idée ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 USE [myDB] GO /****** Object: Table [dbo].[table] Script Date: 03/23/2012 16:24:47 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[table]( [a] [bigint] IDENTITY(1,1) NOT NULL, [b] [uniqueidentifier] NOT NULL, [c] [uniqueidentifier] NOT NULL, [d] [int] NOT NULL, [e] [uniqueidentifier] NULL, [f] [uniqueidentifier] NULL, [g] [datetime] NULL, [h] [datetime] NULL, [i] [int] NOT NULL, [j] [uniqueidentifier] NULL, [k] [datetime] NULL, [l] [int] NULL, [m] [varchar](10) NULL, [n] [int] NULL, [o] [money] NULL, [p] [varchar](256) NULL, [q] [bit] NOT NULL, [r] [int] NOT NULL, [s] [bit] NOT NULL, [t] [int] NOT NULL, [u] [datetime] NOT NULL, [v] [uniqueidentifier] NOT NULL, [w] [datetime] NULL, [x] [uniqueidentifier] NULL, [y] [float] NULL, [z] [uniqueidentifier] NULL, CONSTRAINT [PK_table] PRIMARY KEY CLUSTERED ( [a] ASC )WITH (PAD_INDEX = ON, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY] ) ON [PRIMARY] GO
@++![]()
Partager