{"id":4643,"date":"2015-05-18T10:31:17","date_gmt":"2015-05-18T08:31:17","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/in-memory-oltp-hash-and-range-indexes\/"},"modified":"2015-05-18T10:31:17","modified_gmt":"2015-05-18T08:31:17","slug":"in-memory-oltp-hash-and-range-indexes","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/in-memory-oltp-hash-and-range-indexes\/","title":{"rendered":"In-Memory OLTP: Hash and Range indexes"},"content":{"rendered":"<div><img decoding=\"async\" class=\"blog-image aligncenter\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/2e1ax_default_entry_In_memory_OLTP.jpg\" alt=\"\" \/><\/div>\n<p>Since SQL Server 2014 CTP2, Microsoft has introduced a new kind of index which is the Range index. We have now two ways for indexing an In-Memory table: using either an Hash index or a Range index.<\/p>\n<p>These two indexes are slightly different.<br \/>\nIn fact, a Hash index is a set of buckets, 8-bytes memory pointers, which points to the actual row data or row chain data. SQL Server 2014 uses a hash function to map values to buckets. To minimize Hash collisions the number of bucket should be twice the number of index values. A Hash collision occurs when the Hash function returns the same bucket value for two different data value for example \u201cAudi\u201d and \u201cMercedes\u201d. Hash indexes are optimized for equality predicates.<\/p>\n<p>In contrast, for Range indexes, the leaf level of a Bw-Tree gives you a pointer to the first data row in the row chain. Like with hash indexes, rows with the same indexed value form a row chain. This kind of index is particularly efficient with inequality predicates like\u00a0\u2039 or\u00a0\u203a .If you want to know more about Range Indexes, please read the excellent blog of my colleague <a href=\"https:\/\/www.dbi-services.com\/index.php\/blog\/entry\/in-memory-tables-bw-tree-and-storage\">David Barbarin<\/a>.<\/p>\n<p>To compare these two kind of indexes I will create a new database with first two tables, one In-Memory table with a hash index on a DateTime column and another one (disk-based table) with a non-clustered index on the same column. I will fill these tables with one millions records. Here is the script I used:<\/p>\n<pre class=\"brush: actionscript3; gutter: true; first-line: 1\">-- database creation\nuse master\ngo\nif exists(select * from sys.databases where name = 'Test_InMemoryOLTP_Optimized')\ndrop database Test_InMemoryOLTP_Optimized\ngo\ncreate database Test_InMemoryOLTP_Optimized\ngo\n--create a disk table\nuse Test_InMemoryOLTP_Optimized\ngo\nif exists(select * from sys.objects where name = 'Person_OnDisk')\ndrop table dbo.Person_OnDisk\ngo\ncreate table dbo.Person_OnDisk\n(\nPerson_OnDisk_ID int not null primary key,\nPerson_OnDisk_Name nvarchar(200) not null,\nPerson_OnDisk_Date datetime not null,\nindex Person_OnDisk_Person_OnDisk_Date nonclustered (Person_OnDisk_Date)\n)\n--enable database for memory optimized tables\n-- add memory_optimized_data filegroup\nalter database Test_InMemoryOLTP_Optimized\nadd filegroup Test_InMemory_mod contains MEMORY_OPTIMIZED_DATA\ngo\n--add container to the filegroup\nalter database Test_InMemoryOLTP_Optimized\nadd file (name='InMemory_mod', filename='d:\\InMemory\\InMemory_mod')\nto filegroup Test_InMemory_mod\ngo\nuse Test_InMemoryOLTP_Optimized\ngo\nif exists(select * from sys.objects where name = 'Person_InMemory')\ndrop table dbo.Person_InMemory\ngo\ncreate table dbo.Person_InMemory\n(\nPerson_InMemory_ID int not null primary key\nnonclustered hash with (bucket_count = 2000000),\nPerson_InMemory_Name nvarchar(200) COLLATE Latin1_General_100_BIN2 NOT NULL,\nPerson_InMemory_Date datetime not null index Person_InMemory_Person_InMemory_Date\nnonclustered hash (Person_InMemory_Date) with (bucket_count = 2000000)\n)\nwith (memory_optimized = on, durability = schema_and_data)\n--fill in disk table\nset nocount on\ngo\nbegin tran\ndeclare @cpt int = 0\nWhile @cpt &lt; 1000000\nbegin\ninsert into dbo.Person_OnDisk values\n(@cpt, 'Name_'+cast(@cpt as varchar(10)), dateadd(dd,round(@cpt\/10000,0,1),'2014-01-01'))\nset @cpt += 1\nend\ncommit\n--fill in In-Memory table\nset nocount on\ngo\nbegin tran\ndeclare @cpt int = 0\nWhile @cpt &lt; 1000000\nbegin\ninsert into dbo.Person_InMemory values\n(@cpt, 'Name_'+cast(@cpt as varchar(10)), dateadd(dd,round(@cpt\/10000,0,1),'2014-01-01'))\nset @cpt += 1\nend\ncommit<\/pre>\n<p>First remark, filling in the In-Memory table is three time faster than for disk-based table, respectively on my machine 5 seconds for the former against 15 seconds for the latter. You can also see that I decided to persist my In-Memory table data as I used the durability option schema_and_data instead of schema_only which means that after a restart of my SQL Server service the data will not be persistent, so definitively lost.<\/p>\n<p>Now, I will try to search for records where date is equal to 14-01-2014 and then I will compare results between my In-Memory and my disk-based tables. I will use IO and Time statistics options to get a better view of each query performance:<\/p>\n<pre class=\"brush: actionscript3; gutter: true; first-line: 1\">-- use equality operator with disk table and In-Memory table with Hash index\nUSE Test_InMemoryOLTP_Optimized\nGO\n\u00a0\nSET NOCOUNT ON\nSET STATISTICS IO ON\nSET STATISTICS TIME ON\n\u00a0\nSELECT *\nFROM dbo.Person_OnDisk\nWHERE Person_OnDisk_Date = '2014-01-14'\n\u00a0\nSELECT *\nFROM dbo.Person_InMemory\nWHERE Person_InMemory_Date = '2014-01-14'<\/pre>\n<p>&nbsp;<\/p>\n<p>The result of those queries is:<br \/>\nTable on disk:<br \/>\nTable &#8216;Person_OnDisk&#8217;. Scan count 1, logical reads 5812, physical reads 3, read-ahead reads 5805, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">SQL Server Execution Times:\nCPU time = 31 ms, elapsed time = 1631 ms.<\/pre>\n<p>&nbsp;<\/p>\n<p>Table In-Memory:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">SQL Server Execution Times:\nCPU time = 0 ms, elapsed time = 128 ms.<\/pre>\n<p>&nbsp;<\/p>\n<p>The disk table made multiple logical reads (5812), three physical reads and 5805 read-aheads whereas the In_Memory table as it is in memory did not perform any disk I\/O\u2019s activity.<br \/>\nConcerning the execution time, my disk-based table consumed 31 ms of CPU against and ran in 1631 ms against no CPU and 128 ms for my In-Memory table&#8230;<br \/>\nIn-Memory table is definitively faster than my disk-based table.<\/p>\n<p>Let see now if I used an inequality predicate. So I am using the same queries with an \u203a:<\/p>\n<pre class=\"brush: actionscript3; gutter: true; first-line: 1\">SET NOCOUNT ON\nSET STATISTICS IO ON\nSET STATISTICS TIME ON\n\u00a0\nSELECT *\nFROM dbo.Person_OnDisk\nWHERE Person_OnDisk_Date &gt; '2014-01-14' and Person_OnDisk_Date '2014-02-20'\n\u00a0\n\u00a0\nSELECT *\nFROM dbo.Person_InMemory\nWHERE Person_InMemory_Date &gt; '2014-01-14' and Person_InMemory_Date '2014-02-20'<\/pre>\n<p>&nbsp;<\/p>\n<p>The result is:<br \/>\nDisk table:<br \/>\nTable &#8216;Person_OnDisk&#8217;. Scan count 1, logical reads 5812, physical reads 3, read-ahead reads 5805, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.<\/p>\n<p>SQL Server Execution Times:<br \/>\nCPU time = 171 ms, elapsed time = 3150 ms.<\/p>\n<p>In-Memory table:<br \/>\nSQL Server Execution Times:<br \/>\nCPU time = 204 ms, elapsed time = 2153 ms.<\/p>\n<p>I\/O\u2019s for both tables did not change, but concerning the In-Memory table we saw that the gain is not very interesting compare to equality predicate see before. The Hash index is not tuned for inequality predicate. I will now change the Hash index of my In-Memory table to a Range index. To do it, I will have to drop and recreate my table, as it is not possible to alter an In-Memory table, and to reload data.<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"brush: actionscript3; gutter: true; first-line: 1\">--Change the Hash index by a Range index\nif exists(select * from sys.objects where name = 'Person_InMemory')\ndrop table dbo.Person_InMemory\ngo\n\u00a0\ncreate table dbo.Person_InMemory\n(\nPerson_InMemory_ID int not null primary key\nnonclustered hash with (bucket_count = 2000000),\nPerson_InMemory_Name nvarchar(200) COLLATE Latin1_General_100_BIN2 NOT NULL,\nPerson_InMemory_Date datetime not null index Person_InMemory_Person_InMemory_Date\nnonclustered (Person_InMemory_Date)\n)\nwith (memory_optimized = on, durability = schema_and_data)<\/pre>\n<p>&nbsp;<\/p>\n<p>In-Memory table:<br \/>\nSQL Server Execution Times:<br \/>\nCPU time = 47 ms, elapsed time = 2155 ms.<\/p>\n<p>The CPU time is now more than four time lower with a Range Index compare to a Hash index.<br \/>\nIf I take a look at the execution plan I can see the optimizer is using my range index defined in my script with an index seek operation against a table scan when using an hash index with an equality operator.<\/p>\n<p>Before creating an In-Memory table remember that you will have to think about which kind of predicates will be used in queries to choose the right index: Hash or Range or even both. In addition, don\u2019t forget that an In-Memory table accepts a maximum of eight indexes. Finally, if you need to create another index for an In-Memory table you will have to drop and recreate the table.<br \/>\nI hope this blog will help. If you want to know more about SQL Server 2014 In-Memory OLTP please joins us to our next Event in June, details and inscription <a href=\"https:\/\/www.dbi-services.com\/index.php\/newsroom-e\/events\/event-l-in-memory-r-boost-your-it-performance\">here<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Since SQL Server 2014 CTP2, Microsoft has introduced a new kind of index which is the Range index. We have now two ways for indexing an In-Memory table: using either an Hash index or a Range index. These two indexes are slightly different. In fact, a Hash index is a set of buckets, 8-bytes memory [&hellip;]<\/p>\n","protected":false},"author":21,"featured_media":4644,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[199],"tags":[222,417,51,52],"type_dbi":[],"class_list":["post-4643","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hardware-storage","tag-in-memory","tag-in-memory-oltp","tag-sql-server","tag-sql-server-2014"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>In-Memory OLTP: Hash and Range indexes - dbi Blog<\/title>\n<meta name=\"description\" content=\"Since SQL Server 2014 CTP2, Microsoft has introduced a new kind of index which is the Range index. We have now two ways for indexing an In-Memory table: using either an Hash index or a Range index\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/in-memory-oltp-hash-and-range-indexes\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"In-Memory OLTP: Hash and Range indexes\" \/>\n<meta property=\"og:description\" content=\"Since SQL Server 2014 CTP2, Microsoft has introduced a new kind of index which is the Range index. We have now two ways for indexing an In-Memory table: using either an Hash index or a Range index\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/in-memory-oltp-hash-and-range-indexes\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2015-05-18T08:31:17+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/2e1ax_default_entry_In_memory_OLTP.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"164\" \/>\n\t<meta property=\"og:image:height\" content=\"218\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"St\u00e9phane Savorgnano\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"St\u00e9phane Savorgnano\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/in-memory-oltp-hash-and-range-indexes\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/in-memory-oltp-hash-and-range-indexes\/\"},\"author\":{\"name\":\"St\u00e9phane Savorgnano\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/b6bce7d75118b35bdb3b439ad6a9ca3c\"},\"headline\":\"In-Memory OLTP: Hash and Range indexes\",\"datePublished\":\"2015-05-18T08:31:17+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/in-memory-oltp-hash-and-range-indexes\/\"},\"wordCount\":790,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/in-memory-oltp-hash-and-range-indexes\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/2e1ax_default_entry_In_memory_OLTP.jpg\",\"keywords\":[\"In-memory\",\"In-Memory OLTP\",\"SQL Server\",\"SQL Server 2014\"],\"articleSection\":[\"Hardware &amp; Storage\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/in-memory-oltp-hash-and-range-indexes\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/in-memory-oltp-hash-and-range-indexes\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/in-memory-oltp-hash-and-range-indexes\/\",\"name\":\"In-Memory OLTP: Hash and Range indexes - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/in-memory-oltp-hash-and-range-indexes\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/in-memory-oltp-hash-and-range-indexes\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/2e1ax_default_entry_In_memory_OLTP.jpg\",\"datePublished\":\"2015-05-18T08:31:17+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/b6bce7d75118b35bdb3b439ad6a9ca3c\"},\"description\":\"Since SQL Server 2014 CTP2, Microsoft has introduced a new kind of index which is the Range index. We have now two ways for indexing an In-Memory table: using either an Hash index or a Range index\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/in-memory-oltp-hash-and-range-indexes\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/in-memory-oltp-hash-and-range-indexes\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/in-memory-oltp-hash-and-range-indexes\/#primaryimage\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/2e1ax_default_entry_In_memory_OLTP.jpg\",\"contentUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/2e1ax_default_entry_In_memory_OLTP.jpg\",\"width\":164,\"height\":218},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/in-memory-oltp-hash-and-range-indexes\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"In-Memory OLTP: Hash and Range indexes\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/b6bce7d75118b35bdb3b439ad6a9ca3c\",\"name\":\"St\u00e9phane Savorgnano\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/88d2a790f775c52c1012ec644d883431da758f2cbcfc16067ade04d2ef625ef5?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/88d2a790f775c52c1012ec644d883431da758f2cbcfc16067ade04d2ef625ef5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/88d2a790f775c52c1012ec644d883431da758f2cbcfc16067ade04d2ef625ef5?s=96&d=mm&r=g\",\"caption\":\"St\u00e9phane Savorgnano\"},\"description\":\"St\u00e9phane Savorgnano has more than fifteen years of experience in Microsoft software development and in SQL Server database solutions. He is specialized in SQL Server installation, performance analysis, best practices, etc. St\u00e9phane Savorgnano is Microsoft Certified Solutions Associate (MCSA) and\u00a0Microsoft Certified Solutions Expert (MCSE) for SQL Server 2012. He is also Microsoft Certified Technology Specialist (MCTS) and Microsoft Certified IT Professional (MCITP) for SQL Server 2008 as well as ITIL Foundation V3 certified. Prior to joining dbi services, he was software engineer at Ciba Specialty Chemicals in Basel. St\u00e9phane Savorgnano holds a Master of Informatics from Mulhouse University (F). His branch-related experience covers Banking \/ Financial Services, Chemicals &amp; Pharmaceuticals, etc.\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/stephane-savorgnano\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"In-Memory OLTP: Hash and Range indexes - dbi Blog","description":"Since SQL Server 2014 CTP2, Microsoft has introduced a new kind of index which is the Range index. We have now two ways for indexing an In-Memory table: using either an Hash index or a Range index","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dbi-services.com\/blog\/in-memory-oltp-hash-and-range-indexes\/","og_locale":"en_US","og_type":"article","og_title":"In-Memory OLTP: Hash and Range indexes","og_description":"Since SQL Server 2014 CTP2, Microsoft has introduced a new kind of index which is the Range index. We have now two ways for indexing an In-Memory table: using either an Hash index or a Range index","og_url":"https:\/\/www.dbi-services.com\/blog\/in-memory-oltp-hash-and-range-indexes\/","og_site_name":"dbi Blog","article_published_time":"2015-05-18T08:31:17+00:00","og_image":[{"width":164,"height":218,"url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/2e1ax_default_entry_In_memory_OLTP.jpg","type":"image\/jpeg"}],"author":"St\u00e9phane Savorgnano","twitter_card":"summary_large_image","twitter_misc":{"Written by":"St\u00e9phane Savorgnano","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/in-memory-oltp-hash-and-range-indexes\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/in-memory-oltp-hash-and-range-indexes\/"},"author":{"name":"St\u00e9phane Savorgnano","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/b6bce7d75118b35bdb3b439ad6a9ca3c"},"headline":"In-Memory OLTP: Hash and Range indexes","datePublished":"2015-05-18T08:31:17+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/in-memory-oltp-hash-and-range-indexes\/"},"wordCount":790,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/in-memory-oltp-hash-and-range-indexes\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/2e1ax_default_entry_In_memory_OLTP.jpg","keywords":["In-memory","In-Memory OLTP","SQL Server","SQL Server 2014"],"articleSection":["Hardware &amp; Storage"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/in-memory-oltp-hash-and-range-indexes\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/in-memory-oltp-hash-and-range-indexes\/","url":"https:\/\/www.dbi-services.com\/blog\/in-memory-oltp-hash-and-range-indexes\/","name":"In-Memory OLTP: Hash and Range indexes - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/in-memory-oltp-hash-and-range-indexes\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/in-memory-oltp-hash-and-range-indexes\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/2e1ax_default_entry_In_memory_OLTP.jpg","datePublished":"2015-05-18T08:31:17+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/b6bce7d75118b35bdb3b439ad6a9ca3c"},"description":"Since SQL Server 2014 CTP2, Microsoft has introduced a new kind of index which is the Range index. We have now two ways for indexing an In-Memory table: using either an Hash index or a Range index","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/in-memory-oltp-hash-and-range-indexes\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/in-memory-oltp-hash-and-range-indexes\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/in-memory-oltp-hash-and-range-indexes\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/2e1ax_default_entry_In_memory_OLTP.jpg","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/2e1ax_default_entry_In_memory_OLTP.jpg","width":164,"height":218},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/in-memory-oltp-hash-and-range-indexes\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"In-Memory OLTP: Hash and Range indexes"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/b6bce7d75118b35bdb3b439ad6a9ca3c","name":"St\u00e9phane Savorgnano","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/88d2a790f775c52c1012ec644d883431da758f2cbcfc16067ade04d2ef625ef5?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/88d2a790f775c52c1012ec644d883431da758f2cbcfc16067ade04d2ef625ef5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/88d2a790f775c52c1012ec644d883431da758f2cbcfc16067ade04d2ef625ef5?s=96&d=mm&r=g","caption":"St\u00e9phane Savorgnano"},"description":"St\u00e9phane Savorgnano has more than fifteen years of experience in Microsoft software development and in SQL Server database solutions. He is specialized in SQL Server installation, performance analysis, best practices, etc. St\u00e9phane Savorgnano is Microsoft Certified Solutions Associate (MCSA) and\u00a0Microsoft Certified Solutions Expert (MCSE) for SQL Server 2012. He is also Microsoft Certified Technology Specialist (MCTS) and Microsoft Certified IT Professional (MCITP) for SQL Server 2008 as well as ITIL Foundation V3 certified. Prior to joining dbi services, he was software engineer at Ciba Specialty Chemicals in Basel. St\u00e9phane Savorgnano holds a Master of Informatics from Mulhouse University (F). His branch-related experience covers Banking \/ Financial Services, Chemicals &amp; Pharmaceuticals, etc.","url":"https:\/\/www.dbi-services.com\/blog\/author\/stephane-savorgnano\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/4643","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/21"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=4643"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/4643\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media\/4644"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=4643"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=4643"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=4643"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=4643"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}