Escolar Documentos
Profissional Documentos
Cultura Documentos
Considere substituir a tabela temporária global pela seguinte tabela com otimização
de memória que tem DURABILITY = SCHEMA_ONLY.
SQL
Copiar
CREATE TABLE dbo.soGlobalB
(
Column1 INT NOT NULL INDEX ix1 NONCLUSTERED,
Column2 NVARCHAR(4000)
)
WITH
(MEMORY_OPTIMIZED = ON,
DURABILITY = SCHEMA_ONLY);
Etapas B.1
A conversão de temporário global para SCHEMA_ONLY é o seguinte:
Crie a tabela dbo.soGlobalB uma vez, como faria com qualquer tabela no disco
tradicional.
No Transact-SQL, remova a criação da tabela ##tempGlobalB . É importante criar a
tabela com otimização de memória no momento da implantação, não em um runtime, para
evitar a sobrecarga de compilação que acompanha a criação da tabela.
No T-SQL, substitua todas as menções de ##tempGlobalB por dbo.soGlobalB.
C. Cenário: substituir #table de tempdb de sessão
As preparações para substituir uma tabela temporária de sessão envolvem mais T-SQL
que para o cenário anterior da tabela temporária global. Felizmente o T-SQL extra
não significa a necessidade de mais esforço para realizar a conversão.
SQL
Copiar
CREATE TABLE #tempSessionC
(
Column1 INT NOT NULL ,
Column2 NVARCHAR(4000)
);
Primeiro, crie a função de valor de tabela a seguir para filtrar em @@spid. A
função poderá ser usada por todas as tabelas SCHEMA_ONLY convertidas de tabelas
temporárias de sessão.
SQL
Copiar
CREATE FUNCTION dbo.fn_SpidFilter(@SpidFilter smallint)
RETURNS TABLE
WITH SCHEMABINDING , NATIVE_COMPILATION
AS
RETURN
SELECT 1 AS fn_SpidFilter
WHERE @SpidFilter = @@spid;
Em segundo lugar, crie a tabela SCHEMA_ONLY, bem como uma política de segurança na
tabela.
Observe que cada tabela com otimização de memória deve ter pelo menos um índice.
Para a tabela dbo.soSessionC, um HASH de índice pode ser melhor se for possível
calcular o BUCKET_COUNT apropriado. Porém para este exemplo, simplificamos um
índice NONCLUSTERED.
SQL
Copiar
CREATE TABLE dbo.soSessionC
(
Column1 INT NOT NULL,
Column2 NVARCHAR(4000) NULL,
CONSTRAINT CHK_soSessionC_SpidFilter
CHECK ( SpidFilter = @@spid ),
)
WITH
(MEMORY_OPTIMIZED = ON,
DURABILITY = SCHEMA_ONLY);
go
Aqui está o T-SQL para uma variável de tabela tradicional. Seu escopo termina
quando o lote ou a sessão termina.
SQL
Copiar
DECLARE @tvTableD TABLE
( Column1 INT NOT NULL ,
Column2 CHAR(10) );
D. 1 Conversão embutida para explícita
A sintaxe anterior deve criar a variável de tabela embutida. A sintaxe embutida não
dá suporte à otimização da memória. Por isso, vamos converter a sintaxe embutida na
sintaxe explícita para o TYPE.
Escopo: A definição TYPE criada pelo primeiro lote delimitado por go persiste mesmo
depois que o servidor é desligado e reiniciado. Porém, após o primeiro delimitador
go, a tabela declarada @tvTableC persiste somente até o próximo go ser atingido e o
lote terminar.
SQL
Copiar
CREATE TYPE dbo.typeTableD
AS TABLE
(
Column1 INT NOT NULL ,
Column2 CHAR(10)
);
go
Um índice. Novamente, cada tabela com otimização de memória deve ter pelo menos um
índice.
MEMORY_OPTIMIZED = ON.
SQL