繁体   English   中英

在选择正确的SQL索引时需要建议

[英]Need advise in choosing the right SQL indexes

我正在使用Entity Framework 6.0在C#4.5 / SQL2012中重新做“票务应用程序”。 之前的开发工作很匆忙,没有任何额外的索引。 该应用程序运行正常,但我希望v2保持“应有的状态”。 在我走得更远之前,我需要先“靠在肩膀上”,然后再说“是”。

在其他应用程序中,我的主键始终是我的ID(int)列,因为它似乎是SQL的默认值,所以它恰好是群集的。 之后,我只是在“当我觉得喜欢”时添加了一个未分类的列。

因此,简而言之..具有ID,类型(事件或请求),状态(打开,保留,已解决,..),主题等的票证 。具有ID和名称的表受让人表的结点TicketAssignee与ticketId和AssigneeId

票证与受让人关系是多对多的。 在大多数时候,我只会通过它的ID来获取票证或受让人。 在票证概述中,默认情况下会列出票证,状态为“打开”和“保留”,并按分配给当前受让人的日期(降序)排序。

因此,我现在具有以下索引:

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

我将其与索引的基本知识结合在一起。 我在正确的轨道上吗?

如果您的索引策略正确,则有许多不同的解决方法。

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

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

有时执行计划会提示缺少索引,并尝试朝着正确的方向努力。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM