I am looking to turn page compression on on a spatial index. The instance is 2008 Enterprise. The index is pre-existing on a vendor supplied app. In searching through BOL, it states that compression and fillfactor are both allowed.
ALTER INDEX [ix_city_citypoint] on city
REBUILD WITH (FILLFACTOR = 90, DATA_COMPRESSION = PAGE)
Msg 153, Level 15, State 4, Line 12
Invalid usage of the option data_compression in the ALTER INDEX REBUILD statement.
original create:
CREATE SPATIAL INDEX [ix_city_citypoint] ON [dbo].[city]
(
[citypoint]
)USING GEOGRAPHY_GRID
WITH (GRIDS =(LEVEL_1 = MEDIUM,LEVEL_2 = MEDIUM,LEVEL_3 = MEDIUM,LEVEL_4 = MEDIUM),
CELLS_PER_OBJECT = 16, PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF
, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF
, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [primary]
GO
I can always ignore the index as it's small but now it's morphed into one of those "teachable" moments. Thank you for any insight
Best Answer
Your syntax for
ALTER INDEX...REBUILD WITH (DATA_COMPRESSION...)
is correct. The problem is actually revealed in the error message:For a spatial index in SQL Server 2008, using the data_compression option is not supported. According to Microsoft Documentation, support for data compression was added for spatial indexes in SQL Server 2012:
If/when you upgrade to a newer version of SQL Server, your original
ALTER INDEX
statement would work to rebuild the index usingPAGE
compression. Alternatively, as @AaronBertrand points out in a comment, you can also useCREATE...WITH (DROP_EXISTING=ON, DATA_COMPRESSION=PAGE...
to change the compression settings, however this requires re-supplying the entire index definition, where theALTER
requires you only specify the options you are altering.