2017-04-20 105 views
1

我有一個超過1.8億行的表。SQL Server分區與索引

我一直在考慮表分區來減少掃描(除了索引)。我認爲劃分的一列是STATE。由於這不是一個交易表,我沒有我想分割的日期列。我們不會根據日期做很多選擇。

我的問題是有人曾經在字符串值列而不是日期分割他們的表?如果是這樣,那麼這樣做的性能考慮是什麼?

謝謝。

+3

索引可能是比分區更好的優化選擇。但是,你真的需要提供更多關於查詢的信息,'STATE'的值分佈是什麼,'STATE'更新的頻率等等。 –

+1

這取決於你的工作量(你運行的查詢)。如果你有很多隻有在單一狀態下搜索的查詢,這很好。如果您沒有對狀態進行查詢搜索,或者大多數查詢都在多個州進行搜索,則這可能無濟於事。總是建議日期的唯一原因是因爲這通常是工作負載的特徵,即大多數人在最近的日期運行查詢。在添加任何索引之前,您需要了解您的工作負載並制定指標。你也應該考慮列存儲索引 –

回答

0

是的,你可以按字母順序進行分區。示例here

但是 - 如果目標是提高查詢性能 - 我不確定表分區是否是正確的解決方案。表分區的主要用途是加速批量數據加載和歸檔。萊姆斯Rusana - MS SQL Server開發團隊成員 - 回答非常similar question here,報價...

分區是從來沒有的查詢性能來完成。隨着分區的表現將永遠變得更糟,你所希望的最好不是大的迴歸,但從來沒有改善。

而這來自SQL Server開發團隊!當然,可能有一些邊緣情況分區提高查詢性能,但這看起來不像一個。

幸運的是,除了分區以外,我們還有很多選項可以提高性能。查詢優化是一門藝術,所以爲了真正回答你的問題,我們需要更多的細節。桌子有多寬?你有一些示例查詢嗎?什麼是數據分佈(塊狀)?

僅僅根據你所說的 - 這不是一個交易表 - 然後創建索引聽起來像一個安全的賭注。我們可以添加這些而不用擔心會對數據庫DML性能(更新/插入/刪除)產生負面影響。要開始調查要添加的索引,請啓動SSMS,單擊顯示實際執行計劃按鈕,然後執行其中一個有問題的查詢。現在檢查執行計劃。請添加任何發現的missing indices。希望這可以幫助。祝你好運!

TL:DR分區不會提高查詢性能,請嘗試索引。