Here's a list of scenarios and application patterns where we have seen customers be successful with In-Memory OLTP. Columnstore indexes help with that scenario. For example, memory-optimized tables don't bring down your CPU utilization if most of the queries are performing aggregation over large ranges of data. In-Memory OLTP isn't a magic go-fast button, and isn't suitable for all workloads. You will find a Transact-SQL script with an example for each of these types of objects towards the bottom of this article. Plus, you can have both memory-optimized and traditional disk-based tables in the same database, and run queries across the two. Because these objects behave similar to their traditional counterparts, you can often gain performance benefits while making only minimal changes to the database and the application. In-Memory OLTP is built into SQL Server and SQL Database. At this time, the following T-SQL modules can be natively compiled: stored procedures, triggers, and scalar user-defined functions. You declare a Transact-SQL module to be natively compiled at create time. Natively compiled T-SQL modules are used to further reduce the time taken for an individual transaction by reducing CPU cycles required to process the operations.Table variables and TVPs that are declared using a memory-optimized table type inherit the benefits of non-durable memory-optimized tables: efficient data access, and no IO. These can be used instead of traditional table types. Memory-optimized table types are used for table-valued parameters (TVPs), as well as intermediate result sets in stored procedures.This avoids consuming log IO resources for cases where durability isn't a concern. A non-durable table is a memory-optimized table that is declared with DURABILITY=SCHEMA_ONLY, meaning that changes to these tables don't incur any IO.