Sql-Server-2017
小表上的聚集列儲存索引
聚集列儲存索引表通常對大型表很有用。理想情況下有數百萬行。對查詢也很有用,它只選擇此類表中可用列的子集。
如果我們打破這兩個“規則”/最佳實踐會發生什麼?
- 就像擁有一個聚集列儲存索引表,它最多只能儲存幾千或幾十萬行。
- 並針對需要所有列的那些聚集列儲存表執行查詢。
與行儲存聚集索引表相比,我的測試沒有顯示任何性能下降。這對我們來說很棒。
是否存在違反這兩條規則的“長期”影響?還是任何尚未出現的隱藏陷阱?
上下文為什麼需要它:我設計了一個數據庫模型,它將用於不同供應商數據庫的許多實例。每個數據庫中的模式都保持不變,但不同的供應商有不同的數據量。因此,很少有小型供應商最終可能會在其表中包含少量數據(<1 000 000)。我不能讓自己為行儲存和列儲存模型保留兩個不同的數據庫。
@YunusUYANIK 指出設計模式僅滿足一方面的潛在缺陷,為什麼不在表上創建適合這兩種情況的行儲存和列儲存索引呢?當然,您最終可能會以兩種方式索引相同的欄位,但主要缺點只是增加了儲存空間的使用,這在規劃性能時通常不太關心。
這將取決於您的架構和每個供應商的表中的數據量,因此您必須進行測試以確保您的索引設計用於基於供應商謂詞的不同數據量的適當查詢. 在最壞的情況下,您有時也可能不得不使用索引提示,但我覺得如果您正確設計這兩種類型的索引,那不太可能。