2017-04-20 16 views
0

私はこのテーブルを持っている:SQL Serverでは、「AS」列のインデックスを作成できますか?

CREATE TABLE [dbo].[Kanji] 
(
    [KanjiId] UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL, 
    [Text] NVARCHAR(5) NOT NULL, 
    [Freq] INT NULL, 
    [Grade] INT NULL, 
    [Hash] AS (CONVERT([bigint], hashbytes('md5', [Name])) % (5) + (5)), 
} 

私はText、その後Hashによってインデックスにしたいと思います。しかし、AS式で計算される列では可能ですか?もし私が考慮すべきパフォーマンス上の問題があれば?追加することにより

CREATE TABLE [dbo].[Kanji] 
(
    [KanjiId] UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL, 
    [Text] NVARCHAR(5) NOT NULL, 
    [Freq] INT NULL, 
    [Grade] INT NULL, 
    [Hash] AS (CONVERT([bigint], hashbytes('md5', [Text]) % (5) + (5))) PERSISTED 
) 

:あなたの式はHashファイル...あなたはTextのハッシュを取るためのものと仮定すると、

を作成するので、何Name列は、あなたのテーブルに

+2

https://docs.microsoft.com/en-us/sql/relational-databases/indexes/indexes-on-computed -columns – artm

+7

あなたは*試しましたか?もしそうなら、それは成功したか、エラーメッセージを返しますか?それはインターネット上のランダムな見知らぬ人に尋ねるよりも速いアプローチに見えるだろう。 –

答えて

3

ありません、これを試してみてくださいPERSISTEDキーワードを計算式に追加すると、実際には計算された値がディスクのに格納されます。テーブルの行は、あたかも「通常」の列であるかのようです。これで、あなたは間違いなくあなたのテーブルに(Text, Hash)にインデックスを追加することができます。

CREATE NONCLUSTERED INDEX ix01_Kanji ON dbo.Kanji([Text], [Hash]) 
+0

Computed Columnで永続化されたとは言及せず、その計算列に対してIndexを作成した場合、その時点でオプティマイザはその計算列にインデックスを使用するかどうかを指定しますか? – RGS

+1

@RGS:永続化されていない計算カラムにインデックスを作成することもできないのかどうかはわかりません..... [計算カラムのインデックスの作成方法に関するMSDNのドキュメント](https:// docs。 microsoft.com/en-us/sql/relational-databases/indexes/indexes-on-computed-columns) - それはあなたを助けますか? –

+1

これは、SQL Serverの計算列のインデックスの作成を理解するのに役立ちました。 – RGS

関連する問題