SQL Server tip: creating memory-optimized tables

Posted: (EET/GMT+2)

 

Here's a sample script to generate memory-optimized tables in SQL Server:

USE <database_name, sysname, AdventureWorks>
GO

--Add MEMORY_OPTIMIZED_DATA filegroup to the database.
ALTER DATABASE <database_name, sysname, Adventureworks>
ADD FILEGROUP <memory_optimized_data_filegroup, , sample_database_filegroup> CONTAINS MEMORY_OPTIMIZED_DATA

--Add file to the MEMORY_OPTIMIZED_DATA filegroup.
ALTER DATABASE <database_name, sysname, Adventureworks>
ADD FILE
  ( NAME = <logical_filegroup_filename1, , sample_database_filegroup_file1>,
    FILENAME = N'<filegroup_filename1, , C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\Data\Datasample_database_1>')
TO FILEGROUP <memory_optimized_data_filegroup, , sample_database_filegroup>

--Drop table if it already exists.
IF OBJECT_ID('<schema_name, sysname, dbo>.<table_name,sysname,sample_memoryoptimizedtable>','U') IS NOT NULL
    DROP TABLE <schema_name, sysname, dbo>.<table_name,sysname,sample_memoryoptimizedtable>
GO

--Create memory optimized table and indexes on the memory optimized table.
CREATE TABLE <schema_name, sysname, dbo>.<table_name,sysname,sample_memoryoptimizedtable>
(
	<column_in_primary_key, sysname, c1> <column1_datatype, , int> <column1_nullability, , NOT NULL>, 
	<column2_name, sysname, c2> <column2_datatype, , float> <column2_nullability, , NOT NULL>,
	<column3_name, sysname, c3> <column3_datatype, , decimal(10,2)> <column3_nullability, , NOT NULL> INDEX <index3_name, sysname, index_sample_memoryoptimizedtable_c3> NONCLUSTERED (<column3_name, sysname, c3>), 

   CONSTRAINT <constraint_name, sysname, PK_sample_memoryoptimizedtable> PRIMARY KEY NONCLUSTERED (<column1_name, sysname, c1>),
   -- See SQL Server Books Online for guidelines on determining appropriate bucket count for the index
   INDEX <index2_name, sysname, hash_index_sample_memoryoptimizedtable_c2> HASH (<column2_name, sysname, c2>) WITH (BUCKET_COUNT = <sample_bucket_count, int, 131072>)
) WITH (MEMORY_OPTIMIZED = ON, DURABILITY = <durability_type, , SCHEMA_AND_DATA>)
GO

Note how this script uses templates inside the angular brackets < and >. To easily specify values for these in SQL Server Management Studio, press Ctrl+Shift+M to invoke the "Specify Values for Template Parameters" command from the Query menu.

Hope this helps!