Hoje cedo, precisei colocar alguns pequenos dados rapidamente em um banco de dados SQL Server:
CREATE VIEW MyView AS SELECT * FROM OPENJSON('[ ... ]') WITH ( colA int, etc. );
pretendendo voltar e substituir isso por um CREATE TABLE
, INSERT INTO
, etc. real em algum momento.
O SQL Server não está fazendo nada inteligente para armazenar em cache ou armazenar esses dados, não é? Ele analisa o JSON toda vez que a visualização é consultada, certo? Só queria ter certeza antes de substituí-lo.
Correto. Uma visualização é apenas um objeto que contém a definição de uma consulta. O SQL Server não armazena em cache os resultados das consultas. (Ele armazena em cache apenas páginas de dados brutos das tabelas envolvidas na maioria das consultas.)
Correto. Ele precisa reprocessar sua
OPENJSON()
consulta todas as vezes.Se você puder substituí-lo materializando os resultados em uma tabela, a consulta dessa tabela sempre será computacionalmente mais fácil do que reprocessar a instrução da consulta da sua visualização.
Conforme mencionado, o SQL Server precisa analisar isso sempre que você acessa a visualização.
Uma alternativa muito melhor é usar um
(VALUES
construtor de tabela virtual.Por exemplo:
Ok, acabei de perceber que posso fazer:
SQL Server não é meu primeiro SGBD e acho que confundi
SELECT INTO
ANDINSERT INTO SELECT
.Acho que parece meio estranho não fornecer isso como arquivo
CREATE TABLE AS SELECT
.