Sneak peek on SQL 2014: Parallel SELECT ... INTO!
We are all exited about SQL 2014. I'm sure you have already downloaded the CTP. In this short post I would like to show you a welcome feature that you might not know about :).
Suppose to have a large, parallel query. Until now if you wanted to create a table out of that query you would end up using a non-parallel operator. That means SQL Server would have to gather all the parallel streams before inserting into your table.
With the upcoming new release of SQL Server this will be no longer true! SQL Server 2014 improved the SELECT ... INTO statement so it can now operate in parallel. Want to try yourself?
Create a sample database like this:
CREATE DATABASE Parallel;
GO
USE Parallel;
GO
CREATE TABLE tb1(ID INT IDENTITY(1,1), Testo VARCHAR(100) DEFAULT(GETDATE()));
GO
CREATE TABLE tb2(ID INT IDENTITY(1,1), IDtb1 INT);
GO
INSERT INTO tb1 DEFAULT VALUES;
GO 100
INSERT INTO tb2(IDtb1)
SELECT ID FROM tb1;
GO 100
INSERT INTO tb1(Testo)
SELECT Testo FROM tb1
GO 13
And then execute this query:
SELECT T.*
INTO #tbl
FROM tb1 T
INNER JOIN tb2 B ON T.ID = B.IDtb1
WHERE T.Testo
BETWEEN
(SELECT MAX(Testo) FROM tb1) AND
(SELECT MIN(Testo) FROM tb1);
Up to SQL 2012 the query plan should be something like this:
In SQL 2014 CTP1 this is what you should get:
Notice the improved operator and how it affects the query plan:
You can find confirmation of this here: [MSDN] What's New (Database Engine).
Happy Coding,
Comments
- Anonymous
January 01, 2003
Yes I agree with you: SSIS is still the best way of loading data into precreated tables. The SELECT...INTO parallel feature helps in a very specific scenarios, (ie as temporary storage for long SPs) but will be automatic and safe (provided you raise your compatibility level to 110).
Cheers,
Francesco - Anonymous
April 11, 2014
this is great... but does this work with insert into too?
insert into table select ... from query....
if no, then SSIS still the best way to go...