我正在設計一個數據庫,需要針對最大速度進行優化。爲最大速度選擇SQL Server數據類型
所有的數據庫數據都是從我稱之爲輸入數據庫(包含我正在編輯的數據,主要是一些折線,標記等等)的輸入數據庫中生成的。因此,數據庫不需要進行編輯,但需要保存儘可能多的數據,以便快速向用戶顯示結果(跨城鎮的路線,自定義多段線等)。
問題是:選擇較小的數據類型,例如int類型的smallint會提高性能,否則會影響它?空間不是一個問題,經過一些快速計算,數據庫不會超過200MB,並且不會有超過100.000行的表(平均值將在5.000左右)。
我在問這個,因爲我在網上閱讀了一些文章,有人說較小的數據類型可以提高性能,其他人則認爲它會影響它,因爲必須完成額外的處理。我知道,對於較小的數據庫,可能結果不明顯,但我對每一點都感興趣,因爲我期待着許多請求,這將觸發更多的查詢。
主機環境將是Windows Server 2008 R2與SQL Server 2008 R2。
編輯1:只給你一個例子,因爲我沒有正確的表結構尚未: 我將有一個表將舉行公交線路(200左右的地方),通過鑑定在現實生活中一個獨一無二的數字,並將在各種表格中被引用,並且將在其上進行各種操作。這些引用表將保存最大量的數據。
由於線有獨特的數字,我已經想到了設計的3個例子:
的PK是數據類型的行號:SMALLINT
的PK是數據類型的行數: int
PK有些不同(例如標識),行號存儲在不同的字段中。僅僅爲了爭論,因爲我在'輸入數據庫'上使用了這個不受優化限制的PK,它是一個GUID(16字節)。如果你喜歡,你可以理解這是怎麼壞的比別人比較,如果真的是
所以,請記住,在PK時將在至少15個表,其中一些被引用將會有超過50,000行(其餘的平均值爲5.000,正如我上面所說的),這些行將受到不斷的查詢和操縱,並且我對每一點速度都感興趣。
如果需要,我可以詳細說明這一點。由於
編輯2:而與此相關的另一個問題來到我的腦海,想融入這個討論:
我會看到任何性能改進在這種特定情況下如果我使用原生SQL查詢從我的.NET應用程序內部而不是使用LINQ to SQL?我知道LINQ經過強化優化,能夠在性能方面產生非常好的查詢,但仍然值得一提。再次感謝。
** YES!**選擇正確的數據類型是在你的設計是至關重要的。較小的數據類型等於較少的字節需要被洗牌 - 所以這一定可以幫助!另外,對於所有字符串列使用'VARCHAR(MAX)'的情況非常不利 - 這些「max」數據類型的處理方式與「常規」Varchar(n)列的處理方式不同(對性能有負面影響,太) – 2012-04-22 10:16:43
關於PK - 讀[GUID的初級和聚集鍵(http://www.sqlskills.com/BLOGS/KIMBERLY/post/GUIDs-as-PRIMARY-KEYs-andor-the-clustering-key.aspx )和[磁盤空間很便宜...這不是重點!](http://www.sqlskills.com/BLOGS/KIMBERLY/post/Disk-space-is-cheap.aspx)由金伯利Tripp。使用GUID作爲集羣密鑰是一個**非常糟糕的主意 - 它會導致非常糟糕的索引碎片,從而降低插入,更新,刪除和選擇的速度。 – 2012-04-22 13:26:32
@marc_s感謝這篇文章,我會花更多時間閱讀關於聚集索引的內容,因爲我不太清楚它們是什麼以及它們的行爲。無論如何,我直覺說GUID對於PK來說是個不錯的主意,但現在我知道它爲什麼以及它有多糟糕。但是smallint vs int呢?在低級編程方面,我完全無知,但有人說盡管smallint需要更少的存儲空間,但需要額外的處理來消耗時間。 – Tiborg 2012-04-22 13:46:42