{"id":2513,"date":"2014-07-30T11:00:04","date_gmt":"2014-07-30T15:00:04","guid":{"rendered":"http:\/\/sqlity.net\/en\/?p=2513"},"modified":"2014-11-13T13:29:58","modified_gmt":"2014-11-13T18:29:58","slug":"text-tree-page","status":"publish","type":"post","link":"https:\/\/sqlity.net\/en\/2513\/text-tree-page\/","title":{"rendered":"Page Type 4 &#8211; The Mysterious TEXT_TREE_PAGE"},"content":{"rendered":"<div>\n<p>\nJust last week we talked about <a href=\"http:\/\/sqlity.net\/en\/2496\/text-mix-page\/\">type-3 pages that store LOB data<\/a>. Those pages are of the <span class=\"tt\">TEXT_MIX_PAGE<\/span> page type and they are the ones in which SQL Server stores the actual LOB data. However, there are other pages involved in storing LOB values. They are pages of type <span class=\"tt\">TEXT_TREE_PAGE<\/span>. <\/p>\n<h3>A LOB Example<\/h3>\n<p>\nAs soon as a LOB value like a <span class=\"tt\">VARCHAR(MAX)<\/span> does not fit on <a href=\"http:\/\/sqlity.net\/en\/2134\/row-offset-array\/\">the <span class=\"tt\">DATA_PAGE<\/span> page<\/a> of its row anymore, it is stored in a separate allocation unit in pages of type <span class=\"tt\">TEXT_MIX_PAGE<\/span>. Let us review a quick example:\n<\/p>\n<div>\n[sql]\nCREATE TABLE dbo.TableWithLob<br \/>\n(<br \/>\n  id INT IDENTITY(1,1) CONSTRAINT [PK:dbo.TableWithLob] PRIMARY KEY CLUSTERED,<br \/>\n  some_value INT,<br \/>\n  some_lob VARCHAR(MAX)<br \/>\n);<\/p>\n<p>INSERT INTO dbo.TableWithLob(some_value,some_lob)<br \/>\nVALUES(1,REPLICATE(CAST('X' AS VARCHAR(MAX)),8001));<br \/>\n[\/sql]\n<\/p><\/div>\n<p>\nThis batch creates an example table and inserts a single row with a LOB value that is too big to fit on the main page. However, it is small enough to fit on a single LOB_DATA page. We can confirm that by running the following query that returns all pages that belong to our example table. (Use with care as it uses the undocumented <a href=\"http:\/\/sqlity.net\/en\/2471\/sys-dm_db_database_page_allocations\/\">sys.dm_db_database_page_allocations<\/a> DMF.)\n<\/p>\n<div>\n[sql]\nSELECT OBJECT_SCHEMA_NAME(P.object_id) AS schema_name,<br \/>\n       OBJECT_NAME(P.object_id) AS table_name,<br \/>\n       I.name AS index_name,<br \/>\n       P.partition_number,<br \/>\n       DDDPA.allocation_unit_id,<br \/>\n       DDDPA.allocation_unit_type_desc,<br \/>\n       DDDPA.allocated_page_file_id AS file_id,<br \/>\n       DDDPA.allocated_page_page_id AS page_id,<br \/>\n       DDDPA.page_type,<br \/>\n       DDDPA.page_type_desc,<br \/>\n       DDDPA.page_level<br \/>\n  FROM sys.dm_db_database_page_allocations(DB_ID(),OBJECT_ID('dbo.TableWithLob'),NULL,NULL,'DETAILED') AS DDDPA<br \/>\n  JOIN sys.allocation_units AS AU<br \/>\n    ON DDDPA.allocation_unit_id = AU.allocation_unit_id<br \/>\n  JOIN sys.partitions AS P<br \/>\n    ON P.partition_id = AU.container_id<br \/>\n  JOIN sys.indexes AS I<br \/>\n    ON P.index_id = I.index_id<br \/>\n   AND P.object_id = I.object_id<br \/>\n ORDER BY DDDPA.allocation_unit_id,DDDPA.allocated_page_file_id,DDDPA.allocated_page_page_id;<br \/>\n[\/sql]\n<\/div>\n<p>\nIt returns four rows for the four pages that are part of the table:\n<\/p>\n<p>\n<a href=\"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/07\/table_with_one_LOB_page.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/07\/table_with_one_LOB_page.jpg\" alt=\"a table with a single LOB_DATA page\" title=\"a table with a single LOB_DATA page\" width=\"768\" height=\"468\" class=\"aligncenter size-full wp-image-2515\" srcset=\"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/07\/table_with_one_LOB_page.jpg 768w, https:\/\/sqlity.net\/wp-content\/uploads\/2014\/07\/table_with_one_LOB_page-300x182.jpg 300w, https:\/\/sqlity.net\/wp-content\/uploads\/2014\/07\/table_with_one_LOB_page-150x91.jpg 150w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/a>\n<\/p>\n<p>\nThere are two <a href=\"http:\/\/sqlity.net\/en\/2315\/index-allocation-map\/\">IAM pages<\/a>, one for each of the two allocation units. (Remember, LOB data is stored in a separate <a href=\"http:\/\/sqlity.net\/en\/2287\/allocation-unit\/\">allocation unit<\/a>.) There is the page of type <span class=\"tt\">DATA_PAGE<\/span> that contains data for the \"normal\" columns. For each LOB value that is not stored \"inline\" with the row, the row contains a pointer to the exact position of the value in the <span class=\"tt\">LOB_DATA<\/span> allocation unit. That position is a page of type <span class=\"tt\">TEXT_MIX_PAGE<\/span>.\n<\/p>\n<h3>Large LOB values<\/h3>\n<p>\nA single LOB value can be up to 2GB in size. A value that big clearly does not fit on a single 8192-byte page, not even with the best compression algorithms. That means that eventually the value grows beyond a single <span class=\"tt\">TEXT_MIX_PAGE<\/span> page. In that case new pages of type <span class=\"tt\">TEXT_MIX_PAGE<\/span> are added. Let us see what that actually looks like:\n<\/p>\n<div>\n[sql]\nUPDATE dbo.TableWithLob SET<br \/>\n  some_lob = REPLICATE(CAST('X' AS VARCHAR(MAX)),40200)<br \/>\n WHERE id = 1;<br \/>\n[\/sql]\n<\/div>\n<p>\nWhen executing the <span class=\"tt\">UPDATE<\/span> statement and then above query to list all pages again, you will get a result like this:\n<\/p>\n<p>\n<a href=\"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/07\/a_LOB_value_taking_up_5_TEXT_MIX_PAGE_pages.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/07\/a_LOB_value_taking_up_5_TEXT_MIX_PAGE_pages.jpg\" alt=\"a LOB value using five TEXT_MIX_PAGE pages\" title=\"a LOB value using five TEXT_MIX_PAGE pages\" width=\"768\" height=\"468\" class=\"aligncenter size-full wp-image-2514\" srcset=\"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/07\/a_LOB_value_taking_up_5_TEXT_MIX_PAGE_pages.jpg 768w, https:\/\/sqlity.net\/wp-content\/uploads\/2014\/07\/a_LOB_value_taking_up_5_TEXT_MIX_PAGE_pages-300x182.jpg 300w, https:\/\/sqlity.net\/wp-content\/uploads\/2014\/07\/a_LOB_value_taking_up_5_TEXT_MIX_PAGE_pages-150x91.jpg 150w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/a>\n<\/p>\n<p>\nYou can see that there are now a total of five <span class=\"tt\">TEXT_MIX_DATA<\/span> pages.\n<\/p>\n<p>\nNow let us make the LOB value just a little bit bigger and then run the page-query again:\n<\/p>\n<div>\n[sql]\nUPDATE dbo.TableWithLob SET<br \/>\n  some_lob = REPLICATE(CAST('X' AS VARCHAR(MAX)),40201)<br \/>\n WHERE id = 1;<br \/>\n[\/sql]\n<\/div>\n<p>\nNow there is a new page type in the mix:\n<\/p>\n<p>\n<a href=\"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/07\/table_with_single_TEXT_TREE_PAGE.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/07\/table_with_single_TEXT_TREE_PAGE.jpg\" alt=\"a table with a single TEXT_TREE_PAGE page\" title=\"a table with a single TEXT_TREE_PAGE page\" width=\"768\" height=\"468\" class=\"aligncenter size-full wp-image-2516\" srcset=\"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/07\/table_with_single_TEXT_TREE_PAGE.jpg 768w, https:\/\/sqlity.net\/wp-content\/uploads\/2014\/07\/table_with_single_TEXT_TREE_PAGE-300x182.jpg 300w, https:\/\/sqlity.net\/wp-content\/uploads\/2014\/07\/table_with_single_TEXT_TREE_PAGE-150x91.jpg 150w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/a>\n<\/p>\n<p>\nEven though the LOB value grew by only a single character, the table gained two new pages. One is of the already known <span class=\"tt\">TEXT_MIX_PAGE<\/span> type and the other is of type <span class=\"tt\">TEXT_TREE_PAGE<\/span>.\n<\/p>\n<h3>The TEXT_TREE_PAGE Page Type<\/h3>\n<p>\nThe reason for this additional unexpected page is, that SQL Server actually creates an index on each LOB value that is stored in the <span class=\"tt\">LOB_DATA<\/span> allocation unit. The key for that index is simply the position of each character. That allows SQL Server to quickly find e.g. characters 1,000,006 to 1,000,294 in a large enough LOB value, without having to read the entire value into memory.\n<\/p>\n<p>\nHow that works in detail will be topic of another post. However, the index SQL Server builds is of the same type as a normal table index: A <a href=\"http:\/\/sqlity.net\/en\/2445\/b-plus-tree\/\">B+Tree<\/a>. Therefore we need intermediate index pages and they are the pages of type 4, called <span class=\"tt\">TEXT_TREE_PAGE<\/span> pages.\n<\/p>\n<h3>Summary<\/h3>\n<p>\nSQL Server creates an internal B+Tree index on each LOB value that is stored in the <span class=\"tt\">LOB_DATA<\/span> allocation unit. The actual data can be found in <span class=\"tt\">TEXT_MIX_PAGES<\/span> while the index tree structure is stored in pages of type <span class=\"tt\">TEXT_TREE_PAGE<\/span>.\n<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>What purpose have pages of type TEXT_TREE_PAGE? Discover how SQL Server uses these pages to build positional B+Tree indexes on large LOB values.<\/p>\n<p> <a href=\"https:\/\/sqlity.net\/en\/2513\/text-tree-page\/\">[more&#8230;]<\/a><\/p>\n","protected":false},"author":3,"featured_media":2516,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[5,27,14,105],"tags":[215,214,107,15,108,109],"class_list":["post-2513","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-general","category-series","category-sql-server-internals","category-storage-wednesday","tag-blob","tag-lob","tag-page","tag-sql-server","tag-storage","tag-storage-engine"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Page Type 4 - The Mysterious TEXT_TREE_PAGE - sqlity.net<\/title>\n<meta name=\"description\" content=\"What purpose have pages of type TEXT_TREE_PAGE? Discover how SQL Server uses these pages to build positional B+Tree indexes on large LOB values.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/sqlity.net\/en\/2513\/text-tree-page\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Page Type 4 - The Mysterious TEXT_TREE_PAGE - sqlity.net\" \/>\n<meta property=\"og:description\" content=\"What purpose have pages of type TEXT_TREE_PAGE? Discover how SQL Server uses these pages to build positional B+Tree indexes on large LOB values.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/sqlity.net\/en\/2513\/text-tree-page\/\" \/>\n<meta property=\"og:site_name\" content=\"sqlity.net\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/sqlity.net\" \/>\n<meta property=\"article:published_time\" content=\"2014-07-30T15:00:04+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2014-11-13T18:29:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/07\/table_with_single_TEXT_TREE_PAGE.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"768\" \/>\n\t<meta property=\"og:image:height\" content=\"468\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Sebastian Meine\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@sqlity\" \/>\n<meta name=\"twitter:site\" content=\"@sqlity\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sebastian Meine\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2513\\\/text-tree-page\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2513\\\/text-tree-page\\\/\"},\"author\":{\"name\":\"Sebastian Meine\",\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/#\\\/schema\\\/person\\\/bcffd8c572bc2f1bd10fdba80135e53c\"},\"headline\":\"Page Type 4 &#8211; The Mysterious TEXT_TREE_PAGE\",\"datePublished\":\"2014-07-30T15:00:04+00:00\",\"dateModified\":\"2014-11-13T18:29:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2513\\\/text-tree-page\\\/\"},\"wordCount\":857,\"commentCount\":1,\"image\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2513\\\/text-tree-page\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/sqlity.net\\\/wp-content\\\/uploads\\\/2014\\\/07\\\/table_with_single_TEXT_TREE_PAGE.jpg\",\"keywords\":[\"BLOB\",\"LOB\",\"page\",\"SQL Server\",\"storage\",\"storage engine\"],\"articleSection\":[\"General\",\"Series\",\"SQL Server Internals\",\"Storage Wednesday\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/sqlity.net\\\/en\\\/2513\\\/text-tree-page\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2513\\\/text-tree-page\\\/\",\"url\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2513\\\/text-tree-page\\\/\",\"name\":\"Page Type 4 - The Mysterious TEXT_TREE_PAGE - sqlity.net\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2513\\\/text-tree-page\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2513\\\/text-tree-page\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/sqlity.net\\\/wp-content\\\/uploads\\\/2014\\\/07\\\/table_with_single_TEXT_TREE_PAGE.jpg\",\"datePublished\":\"2014-07-30T15:00:04+00:00\",\"dateModified\":\"2014-11-13T18:29:58+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/#\\\/schema\\\/person\\\/bcffd8c572bc2f1bd10fdba80135e53c\"},\"description\":\"What purpose have pages of type TEXT_TREE_PAGE? Discover how SQL Server uses these pages to build positional B+Tree indexes on large LOB values.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2513\\\/text-tree-page\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/sqlity.net\\\/en\\\/2513\\\/text-tree-page\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2513\\\/text-tree-page\\\/#primaryimage\",\"url\":\"https:\\\/\\\/sqlity.net\\\/wp-content\\\/uploads\\\/2014\\\/07\\\/table_with_single_TEXT_TREE_PAGE.jpg\",\"contentUrl\":\"https:\\\/\\\/sqlity.net\\\/wp-content\\\/uploads\\\/2014\\\/07\\\/table_with_single_TEXT_TREE_PAGE.jpg\",\"width\":768,\"height\":468,\"caption\":\"a table with a single TEXT_TREE_PAGE page\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2513\\\/text-tree-page\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/sqlity.net\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Page Type 4 &#8211; The Mysterious TEXT_TREE_PAGE\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/sqlity.net\\\/en\\\/\",\"name\":\"sqlity.net\",\"description\":\"Quality for SQL\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/sqlity.net\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/#\\\/schema\\\/person\\\/bcffd8c572bc2f1bd10fdba80135e53c\",\"name\":\"Sebastian Meine\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4ab0a6d02dd494849a584a2c3c8bc3bdcef1d0aa5f87e98bf905dbdb9ad2ce3a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4ab0a6d02dd494849a584a2c3c8bc3bdcef1d0aa5f87e98bf905dbdb9ad2ce3a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4ab0a6d02dd494849a584a2c3c8bc3bdcef1d0aa5f87e98bf905dbdb9ad2ce3a?s=96&d=mm&r=g\",\"caption\":\"Sebastian Meine\"},\"sameAs\":[\"http:\\\/\\\/sqlity.net\",\"https:\\\/\\\/x.com\\\/sqlity\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Page Type 4 - The Mysterious TEXT_TREE_PAGE - sqlity.net","description":"What purpose have pages of type TEXT_TREE_PAGE? Discover how SQL Server uses these pages to build positional B+Tree indexes on large LOB values.","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:\/\/sqlity.net\/en\/2513\/text-tree-page\/","og_locale":"en_US","og_type":"article","og_title":"Page Type 4 - The Mysterious TEXT_TREE_PAGE - sqlity.net","og_description":"What purpose have pages of type TEXT_TREE_PAGE? Discover how SQL Server uses these pages to build positional B+Tree indexes on large LOB values.","og_url":"https:\/\/sqlity.net\/en\/2513\/text-tree-page\/","og_site_name":"sqlity.net","article_publisher":"https:\/\/www.facebook.com\/sqlity.net","article_published_time":"2014-07-30T15:00:04+00:00","article_modified_time":"2014-11-13T18:29:58+00:00","og_image":[{"width":768,"height":468,"url":"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/07\/table_with_single_TEXT_TREE_PAGE.jpg","type":"image\/jpeg"}],"author":"Sebastian Meine","twitter_card":"summary_large_image","twitter_creator":"@sqlity","twitter_site":"@sqlity","twitter_misc":{"Written by":"Sebastian Meine","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/sqlity.net\/en\/2513\/text-tree-page\/#article","isPartOf":{"@id":"https:\/\/sqlity.net\/en\/2513\/text-tree-page\/"},"author":{"name":"Sebastian Meine","@id":"https:\/\/sqlity.net\/en\/#\/schema\/person\/bcffd8c572bc2f1bd10fdba80135e53c"},"headline":"Page Type 4 &#8211; The Mysterious TEXT_TREE_PAGE","datePublished":"2014-07-30T15:00:04+00:00","dateModified":"2014-11-13T18:29:58+00:00","mainEntityOfPage":{"@id":"https:\/\/sqlity.net\/en\/2513\/text-tree-page\/"},"wordCount":857,"commentCount":1,"image":{"@id":"https:\/\/sqlity.net\/en\/2513\/text-tree-page\/#primaryimage"},"thumbnailUrl":"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/07\/table_with_single_TEXT_TREE_PAGE.jpg","keywords":["BLOB","LOB","page","SQL Server","storage","storage engine"],"articleSection":["General","Series","SQL Server Internals","Storage Wednesday"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/sqlity.net\/en\/2513\/text-tree-page\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/sqlity.net\/en\/2513\/text-tree-page\/","url":"https:\/\/sqlity.net\/en\/2513\/text-tree-page\/","name":"Page Type 4 - The Mysterious TEXT_TREE_PAGE - sqlity.net","isPartOf":{"@id":"https:\/\/sqlity.net\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/sqlity.net\/en\/2513\/text-tree-page\/#primaryimage"},"image":{"@id":"https:\/\/sqlity.net\/en\/2513\/text-tree-page\/#primaryimage"},"thumbnailUrl":"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/07\/table_with_single_TEXT_TREE_PAGE.jpg","datePublished":"2014-07-30T15:00:04+00:00","dateModified":"2014-11-13T18:29:58+00:00","author":{"@id":"https:\/\/sqlity.net\/en\/#\/schema\/person\/bcffd8c572bc2f1bd10fdba80135e53c"},"description":"What purpose have pages of type TEXT_TREE_PAGE? Discover how SQL Server uses these pages to build positional B+Tree indexes on large LOB values.","breadcrumb":{"@id":"https:\/\/sqlity.net\/en\/2513\/text-tree-page\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/sqlity.net\/en\/2513\/text-tree-page\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/sqlity.net\/en\/2513\/text-tree-page\/#primaryimage","url":"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/07\/table_with_single_TEXT_TREE_PAGE.jpg","contentUrl":"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/07\/table_with_single_TEXT_TREE_PAGE.jpg","width":768,"height":468,"caption":"a table with a single TEXT_TREE_PAGE page"},{"@type":"BreadcrumbList","@id":"https:\/\/sqlity.net\/en\/2513\/text-tree-page\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/sqlity.net\/en\/"},{"@type":"ListItem","position":2,"name":"Page Type 4 &#8211; The Mysterious TEXT_TREE_PAGE"}]},{"@type":"WebSite","@id":"https:\/\/sqlity.net\/en\/#website","url":"https:\/\/sqlity.net\/en\/","name":"sqlity.net","description":"Quality for SQL","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/sqlity.net\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/sqlity.net\/en\/#\/schema\/person\/bcffd8c572bc2f1bd10fdba80135e53c","name":"Sebastian Meine","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/4ab0a6d02dd494849a584a2c3c8bc3bdcef1d0aa5f87e98bf905dbdb9ad2ce3a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/4ab0a6d02dd494849a584a2c3c8bc3bdcef1d0aa5f87e98bf905dbdb9ad2ce3a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4ab0a6d02dd494849a584a2c3c8bc3bdcef1d0aa5f87e98bf905dbdb9ad2ce3a?s=96&d=mm&r=g","caption":"Sebastian Meine"},"sameAs":["http:\/\/sqlity.net","https:\/\/x.com\/sqlity"]}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/07\/table_with_single_TEXT_TREE_PAGE.jpg","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p2wXuw-Ex","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/posts\/2513","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/comments?post=2513"}],"version-history":[{"count":0,"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/posts\/2513\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/media\/2516"}],"wp:attachment":[{"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/media?parent=2513"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/categories?post=2513"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/tags?post=2513"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}