{"id":4748,"date":"2015-05-18T11:53:36","date_gmt":"2015-05-18T09:53:36","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert-1-bulk-insert-2\/"},"modified":"2015-05-18T11:53:36","modified_gmt":"2015-05-18T09:53:36","slug":"variations-on-1m-rows-insert-1-bulk-insert-2","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert-1-bulk-insert-2\/","title":{"rendered":"Variations on 1M rows insert (1): bulk insert"},"content":{"rendered":"<p>I think you already have read the interesting series of blog posts of my colleagues <a href=\"http:\/\/dbi-services.com\/blog\/variations-on-1m-rows-insert-1-bulk-insert\/\">Franck<\/a> and\u00a0<a href=\"http:\/\/dbi-services.com\/blog\/the-fastest-way-to-load-1m-rows-in-postgresql\/\">Daniel<\/a> about inserting on 1 million rows for Oracle and PostGreSQL. So it&#8217;s time to write the first of the same series concerning SQL Server. First of all, just to clarify, the idea is not to make a direct comparison between Oracle, PostGreSQL and SQL Server but just to see variations that exist for each of them to insert quickly 1 million rows.<\/p>\n<p>So I will perform the same basic test that my colleagues with roughly the same environment, one virtual machine on Hyper-V including only one processor, 512MB of memory and one SQL Server 2014 instance enterprise edition capped to 512 MB of memory:<\/p>\n<p><em>Get-WmiObject \u2013Class Win32_processor | ft Manufacturer, Name, NumberOfCores, NumberOfLogicalProcessors \u2013Autosize<\/em><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_42_-_1_-cpu_config.jpg\" alt=\"blog_42_-_1_-cpu_config\" width=\"618\" height=\"65\" \/><\/p>\n<p><code><strong>SELECT<\/strong><strong> @@VERSION<\/strong><\/code><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_42_-_2_-_sql_version.jpg\" alt=\"blog_42_-_2_-_sql_version\" width=\"623\" height=\"68\" \/><\/p>\n<p><code>SELECT<br \/>\nname,<br \/>\nvalue_in_use<br \/>\nFROM sys.configurations<br \/>\nWHERE name = 'max server memory (MB)'<\/code><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_42_-_3_-_sql_config_mem.jpg\" alt=\"blog_42_-_3_-_sql_config_mem\" width=\"247\" height=\"41\" \/><\/p>\n<p><strong>Row-by-row method<\/strong><br \/>\nLet&#8217;s start by using the same test tables with one heap table, clustered table and the same kind of script as well. I just modified the original script written by Franck but translating PL-SQL in T-SQL implies often using a completely different syntax but anyway, we will produce roughly the same bunch of data.<\/p>\n<p>My user objects are stored to an user database called DEMO for this first test:<br \/>\n<code>if object_id('DEMO', 'U') is not null<br \/>\ndrop table DEMO;<br \/>\ncreate table DEMO(\"id\" int , \"text\" varchar(15), \"number\" int);<br \/>\nif object_id('DEMO_PK', 'U') is not null<br \/>\ndrop table DEMO_PK;<br \/>\ncreate table DEMO_PK(\"id\" int , \"text\" varchar(15), \"number\" int,<br \/>\nconstraint demo_pk_pk primary key (id) );<\/code><br \/>\n&#8230;<br \/>\n<code>DECLARE @i INT = 1;<br \/>\nWHILE @i &lt;= 1000000<br \/>\nBEGIN<br \/>\nINSERT INTO DEMO VALUES (@i, CASE ROUND(RAND() * 10, 0) WHEN 1 THEN 'Marc' WHEN 2 THEN'Bill' WHEN 3 THEN 'George' WHEN 4 THEN 'Eliot' WHEN 5 THEN 'Matt' WHEN 6 THEN 'Trey' ELSE'Tracy' END, RAND() * 10000);<br \/>\nSET @i += 1;<br \/>\nEND<\/code><\/p>\n<p>Here my first result for both tables:<br \/>\n<strong>&#8212; 00:02:29 \u2013 Heap table<\/strong><br \/>\n<strong>&#8212; 00:02:25 \u2013 table with clustered index<\/strong><\/p>\n<p>There are no big differences between inserting data into a heap table and a clustered table in this scenario because we insert rows basically in the same manner (always in the last page). At this point it is important to keep in mind that by default SQL Server uses implicit transaction mode. It means that each insert statement represents a transaction which has to be commited to the transaction log.<\/p>\n<p>If we take a look at the specific wait statistics we can expect that the most waits will concern the log writes activity.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_42_-_4_-_waitstats.jpg\" alt=\"blog_42_-_4_-_waitstats\" width=\"631\" height=\"39\" \/><\/p>\n<p>That\u2019s it! The average values are pretty low but our results are far away from those of my colleagues. Let&#8217;s motivated and let&#8217;s talk about a kind of workaroud to speed-up the insert query. In fact, putting the user objects on tempdb database might be a kind of workaround. The main drawback is that tempdb database is temporary by design. Thus, our user objects will be persisted until the restart of the SQL Server but let&#8217;s perform the previous test on tempdb.<\/p>\n<p>Here the results I get from this test:<br \/>\n<strong>&#8212; 00:00:16 \u2013 Heap table<\/strong><br \/>\n<strong>&#8212; 00:00:15 \u2013 table with clustered index<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>So, a big improvement here.\u00a0 Furthermore we may notice that related wait statistics have also changed as follows:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_42_-_5_-_waitstats.jpg\" alt=\"blog_42_-_5_-_waitstats\" width=\"699\" height=\"39\" \/><\/p>\n<p>This main wait type is just related to a sustained CPU usage \u2026 so our final result is not so bad. At this point we may wonder why putting user objects on tempdb database increases the global procedure? In fact, we&#8217;re using the special logging mechanism used by tempdb database that includes the lazy commit feature and the nonlogged after image feature for insert and update statements.<\/p>\n<p>Go back to the user database DEMO and let&#8217;s finish this row-by-row section by inserting data in an single transaction (or explicit mode) and let&#8217;s take a look at the following results:<br \/>\n<code>begin transaction<br \/>\ndeclare @i int = 1;<br \/>\nwhile @i &lt;= 1000000<br \/>\nbegin<br \/>\ninsert DEMO values (@i, case cast(rand() * 10 as tinyint) when 1 then 'Marc' when 2 then'Bill' when 3 then 'George' when 4 then 'Eliot' when 5 then 'Matt' when 6 then 'Trey'<br \/>\nwhen 7 then 'Tracy' when 8 then'Greg' when 9 then 'Steve' else 'Patricia' end, rand() * 1000)<br \/>\nset @i = @i + 1;<br \/>\nend<br \/>\ncommit transaction<\/code><br \/>\n<strong>&#8212; 00:00:10 \u2013 Heap table<\/strong><br \/>\n<strong>&#8212; 00:00:09 \u2013 table with clustered index<\/strong><\/p>\n<p>As excepted, we may notice a drastic drop of the duration value of both tests.<\/p>\n<p><strong>Bulk-insert method<\/strong><\/p>\n<p>Row-by-row commit is not the strength of SQL Server becauseeach commit requires to flush data to the transaction log. So let\u2019s switch to bulk insert mode now. There are several ways to bulk insert data with SQL Server (either from client or server side by using for instance bcp or SSIS tool, BULK INSERT, SELECT INTO or OPENROWSET command and so on). In this test, I will use bcp to export data to a file before importing this file to my two tables.<\/p>\n<p>To export my data I used the bcp command as follows:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_42_-_6_-_bcp_heap.jpg\" alt=\"blog_42_-_6_-_bcp_heap\" width=\"628\" height=\"30\" \/><\/p>\n<p>&#8230;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_42_-_6_-_bcp_heap.jpg\" alt=\"blog_42_-_6_-_bcp_heap\" width=\"626\" height=\"30\" \/><\/p>\n<p>I used native data types (-n option) in this case because my test concerns only transferring data from and to SQL Server. This option can improve performance but to be honest with this bunch of data the difference is not relevant.<\/p>\n<p>Let\u2019s bulk import our data to the two tables DEMO and DEMO_PK in my user database (not tempdb this time). At this point I want to be sure to be more efficient and I will use minimal logging for bulk-import operations in order to reduce the possibility to fill the log space and the potential contention (as a reminder writing to the transaction log file is always synchronous by default). Moreover, don\u2019t forget that in this mode writing to the data file switches from asynchronous to synchronous mode. So becareful about your storage performance to avoid facing some unexpected behaviours during your import process.<\/p>\n<p>So for my tests, the database DEMO is configured to SIMPLE recovery model and I will use BUKL INSERT command with TABLOCK option (which is a requirement to use minimally logging). Using options is possible but after some testing they appear to be not helpful in this context.<\/p>\n<p>Concerning my heap table:<br \/>\n<code>bulk insert demo.dbo.DEMO<br \/>\nfrom 'C:bcpDEMO.dat'<br \/>\nwith<br \/>\n(<br \/>\nDATAFILETYPE = 'native',<br \/>\nTABLOCK<br \/>\n)<\/code><br \/>\nSQL Server Execution Times:<br \/>\nCPU time = 703 ms, <strong>elapsed time = 725 ms.<\/strong><\/p>\n<p>Concerning my clustered table:<\/p>\n<p><code>bulk insert demo.dbo.DEMO_PK<br \/>\nfrom 'C:bcpDEMO_PK.dat'<br \/>\nwith<br \/>\n(<br \/>\nDATAFILETYPE = 'native',<br \/>\nORDER (id ASC),<br \/>\nTABLOCK<br \/>\n)<\/code><br \/>\nSQL Server Execution Times:<br \/>\nCPU time = 1437 ms, <strong>elapsed time = 1489 ms.<\/strong><\/p>\n<p>A little bit higher execution time than bulk import to a heap table. My table with a clustered index seems to introduce some overheads.<\/p>\n<p>The bottom line is pretty the same than my colleagues. Insert and committing data rows by rows is not an optimized way if you plan to import a lot of data. So let\u2019s continue on the same way than my colleagues with the next post of this series until the famous In-Memory feature. Don&#8217;t forget that if you are in Switzerland in June, our experts from Oracle, Microsoft and SAP technologies will talk about In-Memory as implemented by SQL Server, Oracle and SAP HANA. All the same day. It&#8217;s free and you can register now: <a href=\"https:\/\/www.dbi-services.com\/index.php\/newsroom-e\/events\/event-l-in-memory-r-boost-your-it-performance?Itemid=564\" target=\"_blank\" rel=\"noopener noreferrer\">Event In-Memory: boost your IT performance<\/a><\/p>\n<p>By David Barbarin<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I think you already have read the interesting series of blog posts of my colleagues Franck and\u00a0Daniel about inserting on 1 million rows for Oracle and PostGreSQL. So it&#8217;s time to write the first of the same series concerning SQL Server. First of all, just to clarify, the idea is not to make a direct [&hellip;]<\/p>\n","protected":false},"author":26,"featured_media":4749,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[368],"tags":[],"type_dbi":[],"class_list":["post-4748","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development-performance"],"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>Variations on 1M rows insert (1): bulk insert - dbi Blog<\/title>\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\/variations-on-1m-rows-insert-1-bulk-insert-2\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Variations on 1M rows insert (1): bulk insert\" \/>\n<meta property=\"og:description\" content=\"I think you already have read the interesting series of blog posts of my colleagues Franck and\u00a0Daniel about inserting on 1 million rows for Oracle and PostGreSQL. So it&#8217;s time to write the first of the same series concerning SQL Server. First of all, just to clarify, the idea is not to make a direct [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert-1-bulk-insert-2\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2015-05-18T09:53:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_42_-_1_-cpu_config.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"955\" \/>\n\t<meta property=\"og:image:height\" content=\"101\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Microsoft Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Microsoft Team\" \/>\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\/variations-on-1m-rows-insert-1-bulk-insert-2\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert-1-bulk-insert-2\/\"},\"author\":{\"name\":\"Microsoft Team\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4\"},\"headline\":\"Variations on 1M rows insert (1): bulk insert\",\"datePublished\":\"2015-05-18T09:53:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert-1-bulk-insert-2\/\"},\"wordCount\":1013,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert-1-bulk-insert-2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_42_-_1_-cpu_config.jpg\",\"articleSection\":[\"Development &amp; Performance\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert-1-bulk-insert-2\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert-1-bulk-insert-2\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert-1-bulk-insert-2\/\",\"name\":\"Variations on 1M rows insert (1): bulk insert - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert-1-bulk-insert-2\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert-1-bulk-insert-2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_42_-_1_-cpu_config.jpg\",\"datePublished\":\"2015-05-18T09:53:36+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert-1-bulk-insert-2\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert-1-bulk-insert-2\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert-1-bulk-insert-2\/#primaryimage\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_42_-_1_-cpu_config.jpg\",\"contentUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_42_-_1_-cpu_config.jpg\",\"width\":955,\"height\":101},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert-1-bulk-insert-2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Variations on 1M rows insert (1): bulk insert\"}]},{\"@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\/bfab48333280d616e1170e7369df90a4\",\"name\":\"Microsoft Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g\",\"caption\":\"Microsoft Team\"},\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/microsoft-team\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Variations on 1M rows insert (1): bulk insert - dbi Blog","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\/variations-on-1m-rows-insert-1-bulk-insert-2\/","og_locale":"en_US","og_type":"article","og_title":"Variations on 1M rows insert (1): bulk insert","og_description":"I think you already have read the interesting series of blog posts of my colleagues Franck and\u00a0Daniel about inserting on 1 million rows for Oracle and PostGreSQL. So it&#8217;s time to write the first of the same series concerning SQL Server. First of all, just to clarify, the idea is not to make a direct [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert-1-bulk-insert-2\/","og_site_name":"dbi Blog","article_published_time":"2015-05-18T09:53:36+00:00","og_image":[{"width":955,"height":101,"url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_42_-_1_-cpu_config.jpg","type":"image\/jpeg"}],"author":"Microsoft Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Microsoft Team","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert-1-bulk-insert-2\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert-1-bulk-insert-2\/"},"author":{"name":"Microsoft Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4"},"headline":"Variations on 1M rows insert (1): bulk insert","datePublished":"2015-05-18T09:53:36+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert-1-bulk-insert-2\/"},"wordCount":1013,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert-1-bulk-insert-2\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_42_-_1_-cpu_config.jpg","articleSection":["Development &amp; Performance"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert-1-bulk-insert-2\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert-1-bulk-insert-2\/","url":"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert-1-bulk-insert-2\/","name":"Variations on 1M rows insert (1): bulk insert - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert-1-bulk-insert-2\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert-1-bulk-insert-2\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_42_-_1_-cpu_config.jpg","datePublished":"2015-05-18T09:53:36+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert-1-bulk-insert-2\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert-1-bulk-insert-2\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert-1-bulk-insert-2\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_42_-_1_-cpu_config.jpg","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_42_-_1_-cpu_config.jpg","width":955,"height":101},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/variations-on-1m-rows-insert-1-bulk-insert-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Variations on 1M rows insert (1): bulk insert"}]},{"@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\/bfab48333280d616e1170e7369df90a4","name":"Microsoft Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g","caption":"Microsoft Team"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/microsoft-team\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/4748","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\/26"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=4748"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/4748\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media\/4749"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=4748"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=4748"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=4748"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=4748"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}