Eu tenho uma instância que é executada na instância do SQL Server 2017 Developer Edition. Eu restaurei o banco de dados ContosoRetailDW que tinha nível de compatibilidade 100. Após a operação de restauração, executo a seguinte consulta:
CREATE CLUSTERED COLUMNSTORE INDEX CCI_FactOnlineSales ON dbo.FactOnlineSales
O índice columnstore foi criado com sucesso.
Minha pergunta está relacionada ao nível de compatibilidade. Até onde eu sei, o próprio conceito de índice columnstore foi lançado no SQL Server 2012. Além disso, o índice columnstore clusterizado foi lançado no SQL Server 2014. Como o banco de dados com nível de compatibilidade 100 suporta índice columnstore clusterizado? Parece que o banco de dados ainda herda recursos da instância atual.
O nível de compatibilidade existe para fornecer um grau mais alto de compatibilidade com versões anteriores. Podemos dividir isso em algumas categorias:
Os elementos de idioma que foram removidos em uma versão superior do SQL Server ainda podem estar disponíveis nessa versão executada com um nível de compatibilidade inferior. Não há muitos desses hoje em dia.
As alterações de comportamento podem manter o comportamento antigo com o nível de compatibilidade mais baixo.
Novos elementos de linguagem que em uma versão superior agora são palavras-chave/palavras reservadas. Ou seja, se você tem um objeto chamado desta forma ("identificador", formalmente), nesta versão superior você terá que [delimitar] quando referenciar aquele identificador. Para fornecer compatibilidade com versões anteriores, em um nível de compatibilidade inferior, esses novos elementos de idioma não estarão disponíveis. Observe, no entanto, que há muitos novos elementos de linguagem que não introduzem novas palavras-chave e não precisam ser bloqueados no nível de compatibilidade inferior.
Atuação. Use um nível de compatibilidade inferior e é provável que você tenha os mesmos planos de execução como se estivesse executando nessa versão. Ou seja, não há surpresas de desempenho quando você atualiza a versão do mecanismo assumindo que você mantém o nível de compatibilidade de banco de dados antigo. Idealmente.
Não há necessidade de bloquear novos recursos se permitir que eles não apresentem problemas de compatibilidade com versões anteriores. Seu índice columnstore é um exemplo.
Quanto ao que exatamente cada nível de compatibilidade faz, isso está bem documentado aqui: https://learn.microsoft.com/en-us/sql/t-sql/statements/alter-database-transact-sql-compatibility-level