Sql-Server-2005

標準化可以提高速度嗎?

  • August 18, 2016

我們通常認為規範化是避免數據重複的一種方式,為了速度,我們傾向於去規範化。但是,我維護的數據庫存在性能問題,我想知道是否可以規範化一些數據以提高選擇查詢的速度。

我們有一個執行我們幫助台的舊版 MS SQL Server 2005 數據庫。有一個任務表,其中包含一些工程師必須執行的任務。多年來,該表添加了越來越多的列。它現在有 29 個不同類型的列,包括文本(BLOB) 列。

問題是,如果我做一個簡單的查詢(使用 VBScript 中的 ADO),比如select created_date, title from Tasks where blah blah那麼這會變得相當慢。如果我仔細查看,我會發現查詢在一兩秒內返回,但單步執行結果集並讀回(幾百個)結果需要 10-20 秒。當我查看伺服器性能時,我發現磁碟 i/o 和磁碟隊列長度出現了很大的峰值。

這個查詢沒有任何連接,所以它應該盡可能快。where 子句中的列已編入索引,並且重新編入索引不會影響速度,因此我認為索引狀態良好。

我想知道速度問題是否是由於 SQL Server 必須從目前每行的 29 列中挑選出我正在查詢的幾列。所以我的問題是我是否可以通過將表拆分為僅包含最常查詢列的表和包含其他所有內容的第二個表來提高性能?

我想顯而易見的事情是嘗試這個實驗,但是用 SQL 2005 建立一個測試系統並不是一件小事。如果有人遇到此類問題並且可以告訴我它是否值得嘗試,那將非常有幫助。

不,標準化不太可能有幫助。你在那裡的東西看起來更像是缺少索引。29列並不多。並且 BLOB 列已經被系統儲存在單獨的分配單元(行外)上,請參閱表和索引組織

where 子句中的列已編入索引,並且重新編入索引不會影響速度,因此我認為索引狀態良好。

我建議您閱讀如何分析 SQL Server 性能。您的索引未使用或無用。有關更有用的答案,請發布確切的表定義、所有索引、確切的查詢和執行計劃 XML。

引用自:https://dba.stackexchange.com/questions/147153