提升查詢效能的資料分割設計

對資料表和索引進行資料分割有時候可以提升查詢效能,不過這要視您經常執行的查詢類型和硬體組態而定。

為聯結查詢進行資料分割

如果您經常需要在二或多個資料分割資料表之間進行等聯結 (Equi-Join) 來執行查詢,則查詢的分割資料行必須與資料表所據以聯結的資料行相同。此外,資料表或其索引都應該進行配置。這表示它們如果不是使用相同命名的資料分割函數,就是使用不同名稱但本質上相同的資料分割函數,以便能:

  • 使用相同數目的資料分割參數,並確保對應的參數具有相同的資料類型。

  • 定義相同數目的資料分割。

  • 為資料分割定義相同的界限值。

使用這種方式,因為資料分割本身也可以進行聯結,所以 SQL Server 查詢最佳化工具可以更快速地處理聯結。如果查詢所聯結的兩個資料表並未配置或未根據聯結欄位進行資料分割,則資料分割的存在,實際上可能會使查詢速度變慢,而非變快。

利用多重磁碟機

您可能想要將資料分割對應到檔案群組,讓每個資料分割都存取不同的實體磁碟機,藉以提升 I/O 效能。SQL Server 在為 I/O 作業執行資料排序時,會先依資料分割排序資料。在這種狀況下,SQL Server 會一次存取一台磁碟機,而這樣會降低效能。效能方面比較好的改善方法便是設定 RAID,將資料分割的資料檔分割到多個磁碟上。利用這種方式,雖然 SQL Server 仍然會依資料分割排序資料,但它可以同時存取每個資料分割的所有磁碟機。不論所有資料分割是位在一個檔案群組還是多個檔案群組,都可以設計這種組態。如需有關 SQL Server 如何配合不同 RAID 層級運作的詳細資訊,請參閱<RAID 層級與 SQL Server>。

控制鎖定擴大行為

資料分割資料表可藉由啟用鎖定擴大至單一資料分割 (而非整個資料表) 來提升效能。若要允許鎖定擴大至資料分割來減少鎖定爭用,請使用 ALTER TABLE 陳述式的 LOCK_ESCALATION 選項。