10月18日にリリースされた、Windows 8.1 と Windows 8.1 で機能アップされた SkyDrive で遊びすぎて、SQL Server 2014 CTP2 の検証をすることができませんでした。
それでは、SQL Server 2014 のインデックスに関する簡単な検証をしてみましょう。まず、データベースの元ネタを用意します。『 SQL Server 2014 CTP1 インメモリテーブルの検証をやってみた 』を参照してください。AdventureWorks データベースの展開から、In-Memory テーブルの作成方法を説明しています。
今回の検証は、ここを参考にしました。Memory Optimized Table について記載されています。その中に、Walkthrough Using the Memory-Optimization Advisor という気になるキーワードがありました。Disk Based なテーブルを Memory Optimized なテーブルに移行する機能のようです。SQL Server Management Studio から実行することができます。
Walkthrough Using the Memory-Optimization Advisor
In Object Explorer, right click the table you want to convert, and select Memory-Optimization Advisor. This will display the welcome page for the Table Memory Optimization Advisor.
DDL 文を書こうかと思っていましたが、ウィザードのほうが楽ですよね。Memory-Optimization Advisor でやってみましょう。オブジェクトエクスプローラーで、移行したいテーブルで右クリックし、『 Memory Opmization Advisor 』をクリックします。
Next をクリックします。
ワーニングが出てますね。外部キーに関するエラーです。今回の検証では、便宜上外部キーを削除します。
ワーニングが消えました。Next をクリックします。
その他の注意事項が表示されます。Next をクリックします。
下図のように設定し、Next をクリックします。
プライマリーキーを移行します。NONCLUSTERED Hash index を選択し、Next をクリックします。
インデックスを移行します。範囲検索に用いるため、NONCLUSTERED Index を選択し、Next をクリックします。
Migrate ボタンをクリックします。
移行が完了しました。OK ボタンをクリックし、移行処理を終了します。
今回ウィザード移行したテーブルの DDL 文は下記の通りです。太字部分の定義が、RANGE 系のインデックス定義です。
CREATE TABLE [dbo].[FactProductInventory] ( [ProductKey] [int] NOT NULL, [DateKey] [int] NOT NULL, [MovementDate] [date] NOT NULL, [UnitCost] [money] NOT NULL, [UnitsIn] [int] NOT NULL, [UnitsOut] [int] NOT NULL, [UnitsBalance] [int] NOT NULL CONSTRAINT [FactProductInventory_primaryKey] PRIMARY KEY NONCLUSTERED HASH ( [ProductKey], [DateKey] )WITH ( BUCKET_COUNT = 1048576), INDEX [FactProductInventory_Index] NONCLUSTERED ( [ProductKey] ASC, [DateKey] ASC ) )WITH ( MEMORY_OPTIMIZED = ON , DURABILITY = SCHEMA_ONLY )
インデックスが正しく使用されるか、下記の SQL を実行してみましょう。
SELECT * FROM [dbo].[FactProductInventory] WHERE ProductKey = 606 AND [UnitCost] > 150
実行プランを見てみると、nonclustered index scan になっています。期待していた通りの動作となっています。CTP2 で予定通り対応されましたね。
上記以外にも SQL Server 2014 CTP2 には検証したい機能が盛りだくさんです。しかし、検証する時間が足りません......