2014-02-06 28 views
0

我正在使用Entity Framework 6.0在C#4.5/SQL2012中重新执行我的'票证应用程序'。之前的开发很匆忙,没有任何额外的索引。该应用程序工作正常,但我希望V2应该是'它应该是'。在我走得更远之前,我需要'垫在肩上'和单词-yea .. ur doin'a'right-- ☺需要在选择正确的SQL索引时提出建议

在其他应用程序中,我的主键始终是我的ID(int )列碰巧被聚集,因为它似乎是SQL的默认值。之后,我刚刚添加了一个非聚集的专栏,'当我感觉到'时。

因此,在短期.. 表一个ID,类型(事件或请求),状态(开,上保持,解决,..),主题等。 表受让人用一个ID和一个名称 表junctionTicketAssignee与ticketId和assigneeId

票&受让人关系是多对多。 大部分时间我只是通过它的ID获取票或受让人。 在票据概览中,默认情况下票据以分配给当前受让人的日期(desc)排序的状态'开放'&'列出'列出。

为此我现在有以下指标:

in 'ticket' 
PK_ticket = PRIMARY KEY NON-CLUSTERED (ticket.id ASC) 
IX_ticket = UNIQUE CLUSTERED (ticket.id ASC, ticket.dateCreate DESC, status ASC, type ASC) 
IX_type = NON-UNIQUE NON-CLUSTERED (ticket.type) 
IX_status = NON-UNIQUE NON-CLUSTERED (ticket.status) 

in 'assignee' 
PK_assignee = PRIMARY KEY CLUSTERED (assignee.id ASC) 

in 'junctionTicketAssignee' 
PK_junctionTicketAssignee = PRIMARY KEY CLUSTERED (ticketId ASC, assigneeId ASC) 
FK_Assignee = PRIMARY KEY assignee.id -> FOREIGN KEY junctionTicketAssignee.assigneeId 
FK_Ticket = PRIMARY KEY ticket.id -> FOREIGN KEY junctionTicketAssignee.ticketId 

我已经与我的索引上的基本知识把这个在一起。我在正确的轨道上吗?

+0

你也可以看看'过滤的索引'。除此之外看起来像你在正确的轨道上。 – 2014-02-06 16:21:56

回答

1

如果您的索引策略是正确的,有很多不同的方法可以制定出来。

首先在互联网上找到一篇有关索引的文章,并阅读各种可用索引。

然后用实际执行计划运行一些查询并查看输出。然后找到关于执行计划的文章并进行快速扫描。

有时执行计划会暗示缺少的索引,并尝试在正确的方向上激励你。

玩得开心。是的 - 你在正确的轨道上。

+0

我已经读了几篇文章,但我缺乏真实生活的例子。 SQL引擎何时使用IX_type和/或IX_status索引? –

+0

认为索引在'WHERE'子句中很有用...'... WHERE ticket.type = 5'或'... WHERE ticket.status = 1'。索引的一部分工作是停止数据库管理系统检查每一行。相反,可以检查索引并更快地检索数据值。 – bhs