SQL Server 2014: Параллельная операция SELECT INTO

by Alexey Knyazev 30. июня 2013 01:07

SQL Server 2014Совсем недавно в общем доступе появилась версия SQL Server 2014 CTP1 - http://technet.microsoft.com/ru-ru/evalcenter/dn205290.aspx.
Microsoft SQL Server 2014 представляет на рынке новые возможности памяти, встроенные в основную базу данных, включая встроенную в память оперативную обработку транзакций (OLTP), дополняющую существующие возможности бизнес-аналитики и хранения данных в памяти, для создания самого многофункционального решения хранящейся в памяти базы данных. SQL Server 2014 также предлагает новые облачные возможности, позволяющие упростить перемещение существующих баз данных SQL в облако и открыть для себя новые сценарии гибридного развертывания.

Поэтому пора начать смотреть, что нового, что интересного нас ждёт в новой версии самой популярной промышленной СУБД.

Говоря о новинках стоит обратиться к ряду документов, которые так же появились в общем доступе:


Но обо всём по порядку, и начнём с одной очень интересной возможности, которая появилась в SQL Server 2014 - это параллельное выполнение операции SELECT...INTO.

Тесту буду проводить на 2-х версиях:

SQL Server 2012

Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64) 
	Dec 28 2012 20:23:12 
	Copyright (c) Microsoft Corporation
	Enterprise Edition (64-bit) on Windows NT 6.1  
         (Build 7601: Service Pack 1)

SQL Server 2014 CTP1

Microsoft SQL Server 2014 (CTP1) - 11.0.9120.5 (X64) 
	Jun 10 2013 20:09:10 
	Copyright (c) Microsoft Corporation
	Enterprise Evaluation Edition (64-bit) on Windows NT 6.1  
         (Build 7601: Service Pack 1)

На обоих версиях создадим таблицу dbo.test_table и наполним тестовыми данными (65536 записей)

set nocount on;
go

if object_id( N'dbo.test_table', N'U' ) is not null
drop table dbo.test_table;
go

create table dbo.test_table 
      ( id     int primary key
      , dt     datetime default getdate()
      , uniqid uniqueidentifier default newid()
      , val    nvarchar(1024) default replicate( 'A', 1024 )
      );
go

with 
  cte1 as ( select t1.* from ( values(1),(1) ) t1(i) )
, cte2 as ( select t2.* from cte1 t1 cross join cte1 t2 )
, cte3 as ( select t3.* from cte2 t2 cross join cte2 t3 )
, cte4 as ( select t4.* from cte3 t3 cross join cte3 t4 )
, cte5 as ( select t5.* from cte4 t4 cross join cte4 t5 )
insert into dbo.test_table ( id )
select row_number() over ( order by (select null) ) as id from cte5;
go

После этого мы "перекинем" все эти данные во временную таблицу с помощью инструкции SELECT...INTO

set statistics time on;
set statistics io on;
go

checkpoint;
dbcc dropcleanbuffers;
go

select * into #t 
from dbo.test_table;
go

И сравним планы выполнения:

SQL Server 2012



SQL Server 2014

Tags: ,

SQL Server

Комментарии (3) -

Александр Сигачёв
Александр Сигачёв Russia
09.07.2013 14:53:35 #

Спасибо за заметку о SELECT INTO, не замечал этой особенности среди других новых фич 2014. Но, увы, картинки с планами запросов не показываются.

Reply

Alexey Knyazev
Alexey Knyazev Russia
09.07.2013 21:41:50 #

Спасибо, за фидбэк..."вернул" картинки

Reply

Сергей
Сергей Russia
10.10.2013 0:58:05 #

Алексей, здравствуйте!
Отличная статья. Есть ли какие то сравнения быстродействия версий 2008R2 и 2014 ? Интересует возможность ускорения "из коробки", по умолчанию так сказать для одного из клиентов, использующих возможность обновления по Software Assurance. SQL Server работает в связке с 1с 8,2

Reply

Добавить комментарий

  Country flag

biuquote
  • Комментарий
  • Предпросмотр
Loading