私は最近、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属性を追加すると、インデックスの名前が移動結果としてのみ取得されます。しかし、それを明確にしないと申し訳ありません。
外部キーにはデフォルトでインデックスがありません.Woukがそのケースになると思いますか? – ErikEJ
推奨を適用した場合、対応するマイグレーションにはRenameIndexしか含まれていないので... – Lorenzo
これはデータベースではなくコードです!あなたはデータベーススキーマを見ましたか? – ErikEJ