2014-02-24 52 views
0

在大量存儲過程中,我有以下條件語句。 25%的行有一個Visible = 1的標準,但其餘的不在Web應用程序中使用,只是它被處理的引用。向該列添加索引是否有好處?在布爾列上添加SQL Server索引對於性能

WHERE 
    ev.Visible = 1 AND 
    (@StartDate IS NULL OR @StartDate <= ev.StartDate) 
+0

這是你可以測試自己的東西。我們沒有你的數據集。你究竟在尋找什麼? – Kermit

+0

林想知道如果不行,那麼我會試試看。 –

+2

那麼你不想爲每個查詢添加索引。如果您發現查詢的性能不佳,經常使用它,它可能會從索引中受益,那麼我不明白爲什麼。 – Kermit

回答

3

可能的最佳做法是測試您的實際數據並確定您的發現。

25%的選擇性在大批量上不是很好。在你的數據上測試它來驗證。你可能會做其他類型的搜索,這將需要其他索引。

有幾種選擇,以更好地處理這種情況:

  • 根據什麼在那些條款是其他謂詞,你可能要考慮使用過濾索引。 CREATE INDEX [IX_Post_Startdate] ON dbo.Posts(StartDate) WHERE VISIBLE = 1。這將支持您基於startDate搜索的其他查詢。
  • 如果ALL您的查詢使用相同的模式(Visible = 1 AND ...),那麼分區可能是一個好方法。
    • 分區是一項企業功能,所以如果您不使用該版本,則可以通過將「不可見」行移動到某種歸檔表中來手動分區數據。
  • 如果你有很少的INSERT/UPDATE/DELETE和許多SELECT語句,那麼使用索引視圖可以證明是一個很好的解決方案。
+0

*「SQL Server將只使用單個索引」*此源代碼?每個查詢的每個表是 – Kermit

+0

。它將在非聚簇索引中執行索引查找,然後在聚簇索引中查找。它不會使用額外的索引。將看看我能否找到一個來源。 –

+0

對我來說不好的措辭,刪除了錯誤的陳述 –