2013-11-05 56 views
0

我有一張有10列的表格。第一個主鍵是一個名爲「key」的序列int。另一個被命名爲「地位」。一個名爲「test_reference」,一個名爲「倉庫」,一個名爲「啓用」(一個標誌)。其他列可以忽略。爲2個不同值掃描SQL Server表列的最快方法?

我需要掃描整個表格,並獲得表格中「狀態」爲「6」或「7」,「啓用」爲1(啓用)的所有行的結果集。 「狀態」中的狀態範圍僅爲0-7(僅限整數值)。

此結果集需要經常(每5分鐘)和潛在的200k +記錄確定。我敢肯定,有比以下更快的方式:我已經創建了一個索引(狀態,已啓用)。但如果有更好的解決方案,請幫助我!

謝謝你的時間。

回答

1

添加持久計算的[位]列MyFlag,如果狀態爲8或9且啓用= 1,則該值爲1,否則將其設置爲0,在其上創建索引,然後進行查詢「...其中MyFlag = 1 」。由此,比較將在你需要之前完成。應該工作得更快。讓我知道它是否有幫助。

+0

它會幫助「持續計算」有一個關於「狀態」的索引嗎?或者在這種情況下,我應該只在MyFlag上添加索引嗎?順便謝謝你的建議,我無法嘗試。 – user1776193

+0

@ user1776193如果你用我的方式,那麼你只需要MyFlag上的索引。順便說一句,你現在不能測試我的解決方案,或者根本無法使用它? – LINQ2Vodka

+0

我認爲吉姆意味着「狀態」字段不需要索引。在公式持續存在的情況下,查詢不需要查看公式的組件。 –

1

您可以嘗試一個Filtered Index,它將只存儲與您正在查找的子集相匹配的行。假設在你的例子中你選擇的兩列是你真正想要的兩列,你也可以添加一個INCLUDE子句來使它成爲一個覆蓋索引(所以你甚至不需要回到表格去獲得這些列值)。過濾索引是在SQL Server 2008中引入的,順便說一句。

CREATE NONCLUSTERED INDEX IX_lgvftchinv_status_enabled 
    ON lgvftchinv ([status], [enabled]) 
    INCLUDE (warehouse, test_reference) 
    WHERE [status] IN (8, 9) 
     AND [enabled] = 1 
+0

好點 – LINQ2Vodka

相關問題