2016-11-19 3 views
3

私は最近、AzureのSQL Performance AdvisorサービスからAzureのデータベースにインデックスチューニングが必要であり、この推奨が無料で提供されているという電子メール(実際は2つ)を受け取りました。Azure SQLデータベースアドバイザの提案

私はデータベースの専門家ではないので、これは私の意見では非常に良いサービスです。

しかし、既にインデックスが作成されているので、インデックスはすでに外部キーであるデータベース列に作成することをお勧めします。

Recommended action:  CreateIndex 
Indexed columns: [Xxxxxx] 
Estimated Index Impact:  HIGH IMPACT 
Date: 2016-11-17 

実際に列がEF6の外部キーデータアノテーション属性で管理されるように指定する必要があります。

私は[Index]属性の列を装飾していると推測しましたが、対応する移行ではインデックスの名前が変更されただけです。

しかし、データ注釈属性ではできないのは、インデックスに含まれる列を指定することです。

これはアドバイザリーサービスから特定された問題でありますか?この場合、データベース上で直接DDLを使用してインデックスを作成すると、コードと同期してデータベース構造をどのように維持しますか?

EDIT:@ErikEJコメントを1として

、それは勧告を適用する前にあるように私はテーブルのDDLを追加してい:

CREATE TABLE [dbo].[SVC](
    [SVCID] [int] IDENTITY(1,1) NOT NULL, 
    [....other fields omitted for brevity...], 
    [CampaignID] [int] NOT NULL, 
CONSTRAINT [PK_SVC] PRIMARY KEY CLUSTERED ([SVCID] ASC) 
    WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = ON, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

ALTER TABLE [dbo].[SVC] WITH CHECK ADD CONSTRAINT [FK_SVC_CampaignID] FOREIGN KEY([CampaignID]) REFERENCES [dbo].[SvcCampaign] ([CampaignID]) 
GO 
ALTER TABLE [dbo].[StoredValueCard] CHECK CONSTRAINT [FK_SVC_CampaignID] 
GO 

CREATE NONCLUSTERED INDEX [IX_CampaignID] ON [dbo].[SVC] ([CampaignID] ASC) 
    WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = ON, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, 
     ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY] 
GO 

私はすでに書いたように、インデックスがすでにありますクラスメンバーにIndex属性を追加すると、インデックスの名前が移動結果としてのみ取得されます。しかし、それを明確にしないと申し訳ありません。

+0

外部キーにはデフォルトでインデックスがありません.Woukがそのケースになると思いますか? – ErikEJ

+0

推奨を適用した場合、対応するマイグレーションにはRenameIndexしか含まれていないので... – Lorenzo

+0

これはデータベースではなくコードです!あなたはデータベーススキーマを見ましたか? – ErikEJ

答えて

0

オリジナル回答者は正しいですが、FKはデフォルトでインデックスに登録されていません。データベースアドバイザーは、あなたが指導したばかりの指導者を作成します。

「データベース構造を維持する」というのは、実際にはSQLスクリプトに関するものであり、重要な問題ではない参照実装を維持している場合を除きます。

+0

まあ、意味があります。しかし、すでにインデックスがあります。実際のデータベースからリバースエンジニアリングされたDDLスクリプトを追加して私の質問を編集しました。 – Lorenzo