SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

SQL Server 2014 CTP 1 の新機能を使ってみる – TSQL の拡張 –

leave a comment

ぼちぼち Hekaton を書こうかと思っているのですが、TSQL の拡張も面白そうなので今回は SQL Server 2014 で拡張された TSQL について少し触れてみたいと思います。

BOL では
What’s New (Database Engine)
CREATE TABLE (SQL Server)
に記載されています。

SQL Server 2014 の TSQL の拡張機能として、

 

Transact-SQL Enhancements


Inline specification of CLUSTERED and NONCLUSTERED

Inline specification of CLUSTERED and NONCLUSTERED indexes is now allowed for disk-based tables. Creating a table with inline indexes is equivalent to issuing a create table followed by corresponding CREATE INDEX statements. Included columns and filter conditions are not supported with inline indexes.

SELECT … INTO

The SELECT … INTO statement is improved and can now operate in parallel. The database compatibility level must be at least 110.

が紹介されていますのでこれら 2 つの拡張を見ていきたいと思います。

 

■インラインによるインデックスの作成


SQL Server 2014 では CREATE TABLE で以下の設定ができるようになりました。

<column_definition> ::=  column_name <data_type> [ FILESTREAM ]     [ COLLATE collation_name ]     [ SPARSE ]     [ NULL | NOT NULL ]     [ [ CONSTRAINT constraint_name ] DEFAULT constant_expression ] | [ IDENTITY [ ( seed ,increment ) ] [ NOT FOR REPLICATION ] ]     [ ROWGUIDCOL ]     [ <column_constraint> [ …n ] ] [ <column_index> ]

<column_index> ::= INDEX index_name [ CLUSTERED | NONCLUSTERED ] [ WITH ( <index_option> [ ,… n ] ) ] [ ON { partition_scheme_name (column_name ) | filegroup_name | default } ] [ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]

追加された <column_index> の構文を使用すると CREATE TABLE で以下のようにインデックスが設定できるようになります。

CREATE TABLE dbo.Table_3
    (
    Col1 uniqueidentifier NOT NULL PRIMARY KEY,
    Col2 uniqueidentifier NULL INDEX IX_Table3 NONCLUSTERED(Col2, Col3),
    Col3 uniqueidentifier NULL
    )  ON [PRIMARY]
GO

列の属性としてインデックスをかけるようになった感じでしょうか。

 

■SELECT INTO の並列実行


テーブルのコピーを作成する場合などは、SELECT INTO 句を使用することがありますが、このステートメントで並列化が行われるようになりました。

以下は SQL Server 2012 の実行プランになります。
Table Scan と Table Insert がシリアルで実行されていることが確認できます。

image

同様のクエリを SQL Server 2014 CTP1 で実行します。
こちらではクエリが並列化されて実行されているのが確認できますね。
image

OPTION の MAXDOP を使用して並列度の制御をすることが可能です。
imageimage

並列化することで処理速度にもかなり影響が出てきますのでこのプランが使えるようになったことはうれしいですね。

Written by masayuki.ozawa

6月 29th, 2013 at 6:23 pm

Posted in SQL Server

Tagged with ,

Leave a Reply

*