Sql-Server
計算列使選擇查詢執行緩慢
我們正在根據要求在一台伺服器上創建索引,並將所有索引複製到其他伺服器。所有伺服器都具有相似的對象和架構,但資源配置值不同。
我們有一個問題,即連接 4 個視圖的查詢正在一台伺服器上完成,但同一查詢在另一台伺服器上需要 4 分鐘。如果我從選擇列表中取出計算列,它將在 4 秒內完成。
這兩個執行計劃完全不同。
1)在SQL選擇不同的執行計劃的情況下,盲目複製索引是一個好計劃嗎?
2)我也嘗試在基表的計算列上創建索引,仍然沒有運氣,還有什麼進一步的建議嗎?(由於某種原因,我們無法在視圖上創建索引。)
“這是複制索引的好計劃嗎?” 索引的存在是為了提高讀取操作的響應時間。這些操作源於工作量。如果工作量不同,索引也應該不同。
例如,讓一台伺服器處理 OLTP 活動並將數據複製到處理分析查詢的第二台伺服器的情況並不少見。第一台伺服器的工作主要是單行查找。第二個範圍掃描和聚合。在這種情況下,在每台伺服器上使用不同的索引是很有意義的。如果所有索引都在兩台伺服器上,那麼在寫入和維護期間將會有額外的、不必要的工作要做。
添加一個計算創建一個虛擬列,仍然在執行時為每一行選擇計算。
您需要的是一個計算的持久列,它在插入時計算並物理儲存在表中:
[ComputedColumn] AS (dbo.Function(column)) PERSISTED
注意:當計算它們的表達式發生變化時,計算持久列。
本文中的更多有用資訊: