Azure SQL数据库顾问建议

时间:2016-11-19 21:32:01

标签: azure entity-framework-6 azure-sql-database

我最近从Azure SQL Performance Advisor服务收到一封电子邮件(实际上是两封),说我的Azure数据库需要进行索引调整,而且这个建议是免费提供的。

我认为这是一项非常好的服务,因为我不是数据库专家。

然而,这个建议真的很奇怪,因为建议在数据库列上创建一个已经是外键的索引(所以它已经有了一个索引)。

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

我需要指定该列实际上是通过EF6中的外键数据注释属性来管理的。

然后我尝试应用推荐,因此我使用[Index]属性修饰了列,我怀疑,相应的迁移只进行了索引重命名。

但是,我无法通过数据注释属性执行的操作是指定索引中包含的列。

这可能是咨询服务中发现的问题吗?在这种情况下,如果我直接在数据库上使用DDL创建索引,我如何维护数据库结构与代码同步?

修改

根据@ErikEJ评论,我在应用推荐之前为表格添加了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属性,我只会将索引重命名为迁移结果。很抱歉没有说清楚。

1 个答案:

答案 0 :(得分:0)

原始回复者是正确的,默认情况下不对FK编制索引。如果您允许,数据库顾问将为您创建索引。

至于"维护数据库结构",这完全是关于sql脚本的,除非你维护的参考实现并不是一个关键问题。