Sql-Server

SQL 數據類型和 SmallInt/TinyInt 與正常整數

  • May 13, 2020

使用正確的數據類型對 SQL Server 有什麼好處?

例子:

  1. SmallInt/TinyInt 與正常整數
  2. 小數(2)與浮點數
  3. varchar(100) 與 char(100)

這些天,現代計算真的很重要嗎?

謝謝,

使用正確的數據類型對 SQL Server 有什麼好處?

如果您使用正確的數據類型,您的數據庫將更好地匹配您的模型,並且在空間和速度方面更有可能高效。您可能會因為“太寬泛”而關閉這個問題,因為它可能是一個相當廣泛的主題。

要觸及您更具體的觀點:

SmallInt/TinyInt 與正常整數

較小的類型占用的空間更少,因此頁面中可以容納更多的行,從而減少了磁碟和記憶體中佔用的空間。當然,如果您選擇的類型太小,您的應用程序將會失敗。還要考慮BIGINT何時可能需要大於 2,147,483,648(或小於 -2,147,483,647)的值。

當您考慮索引時,差異會成倍增加:較大的類型最終會出現在任何涵蓋列的索引中。

小數(2)與浮點數

這裡有很大的不同。DECIMAL(及其同義詞NUMERIC)實際上是按比例縮放的整數,保證具有您指定的精度。浮點數有其用途,但要非常小心,因為它們只是近似值,因為在二進制和十進制形式之間轉換的捨入問題 - 最常見的例子是 0.1+0.2 通常不等於 0.3。有關詳細資訊,請參閱http://floating-point-gui.de/以及許多其他參考資料,並執行它以直接查看效果:

SELECT CAST(0.1 AS FLOAT        ) + CAST(0.2 AS FLOAT        ), CASE WHEN CAST(0.1 AS FLOAT        ) + CAST(0.2 AS FLOAT        ) = 0.3 THEN 'OK' ELSE 'oops' END
SELECT CAST(0.1 AS DECIMAL(10,2)) + CAST(0.2 AS DECIMAL(10,2)), CASE WHEN CAST(0.1 AS DECIMAL(10,2)) + CAST(0.2 AS DECIMAL(10,2)) = 0.3 THEN 'OK' ELSE 'oops' END

FLOAT本質上:除非你知道它是你需要的,否則不要使用。

varchar(100) 與 char(100)

可變長度類型在空間方面效率更高,但在 CPU 方面處理效率較低。如果您使用(MAX)它們,它們可能會被儲存在頁外,這會再次降低效率,並且如果您在表上使用它,則會停止壓縮生效。如果您使用行或頁面壓縮,您的固定長度類型無論如何都會變為可變長度,您保留了對您的模型可能有用的內置長度驗證。

這些天,現代計算真的很重要嗎?

簡短的回答:是的。

長答案:yyyyyyyyeeeeeeeeeeesssssssssssssssssss!

現代 CPU 的考慮可能會有所不同——它們相對於儲存和網路傳輸速度可能比以前快得多,因此以額外的 CPU 時間為代價來節省空間通常是一個很好的優化,但正確的類型選擇仍然很重要。

儘管類型選擇對於優化以外的問題最為重要:正確的類型可以更好地為您的數據建模,這應該是您的首要任務。

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