2014-02-06 61 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