我不知道在使用UNSIGNED標誌定義MySQL中的某個整數字段方面是否有任何積極影響?它使查詢更快還是數據庫更小?或者,如果我擔心上限,我是否應該打擾呢?在MySQL中籤名或未簽名
回答
根據MySQL的5.1手冊section 10.2:
在非嚴格模式中,當一個 外的範圍值被分配給一個 整數列,MySQL的存儲表示值 相應 列數據類型的端點 範圍。如果將256存儲到TINYINT 或TINYINT UNSIGNED列中,則MySQL 將分別存儲127或255。當 浮點或定點柱 分配超出 範圍由指定的(或默認 )精度和標度暗示的值時,MySQL 存儲表示該範圍的 對應的端點的值。
所以使用UNSIGNED只有當你關心上限時纔是必要的。另外添加UNSIGNED不會影響列的大小,只是數字是如何編號爲represented。
當列僅用於包含正數時使用無符號數。
它不會影響列上的任何I/O性能,因爲它仍然佔用完全相同的空間量。
這並不重要,除非你試圖讓你的價值最大化並且不需要負值。
例如,假設您想存儲0-255。
你可以使用tinyint,但前提是你將它用作unsigned。
很多我見過的數據庫,人們並不打擾這樣優化,最後得到一些相當大的表,因爲他們一直使用INT。
不過,如果你在談論int vs unsigned int,那麼根本沒有性能影響或空間效應。
從標準的角度來看,我總是使用無符號的,只有當我知道我需要負值時才使用符號。
說到性能或存儲,這絕對是一回事。
作爲一個通用規則,使用適合您的更適合的方式:如果您只需要正值,則將值存儲爲UNSIGNED,否則,將其設置爲默認值[SIGNED]。
當爲PRIMARY AUTOINCREMENT列設置SIGNED值時會出現一個問題:自動生成的數字的計數以1開頭(不是最小的負數)並且可能的值將提前結束,因爲您將僅使用價值的一半。所以在這種情況下(PRIMARY + AUTOINCREMENT列)最好存儲爲UNSIGNED。
它會提高性能,假設您想要搜索數量< 50o。
沒有「無符號」: 過程流程,由於數量字段是一個「int」,並且你有這個字段的索引,所以MySQL將定義範圍爲-2147483648到500,它將得到基於此的結果範圍。由於數量字段是一個帶有「無符號」的「int」,並且你有這個字段的索引,所以MySQL將把該範圍定義爲0到500,並且它將得到結果基於這個範圍。
警告,存在unsigned int(UINT)和實體框架或ADO.NET的問題。這可能涉及由MySQL連接器版本6.
以我的經驗的集成問題,UInt
由EF,這可能會提高一些精確度的問題,因爲UInt
不Long
解讀爲Long
。任何不熟悉問題的人都可能會頭痛。
其他關注:
在這裏你可以看到MySQL documentation的簽署與UNSIGNED INT的範圍。您會很快注意到UNSIGNED INT的樓層始終爲0,因此它永遠不會是負面的。
Type Storage Minimum Value Maximum Value
(Bytes) (Signed/Unsigned) (Signed/Unsigned)
TINYINT 1 -128 127
0 255
SMALLINT 2 -32768 32767
0 65535
MEDIUMINT 3 -8388608 8388607
0 16777215
INT 4 -2147483648 2147483647
0 4294967295
BIGINT 8 -9223372036854775808 9223372036854775807
0 18446744073709551615
- 1. 在MySQL中籤名和未簽名的區別?
- 2. 未簽名簽名的jar
- 3. 簽名與未簽名的解釋
- 4. 未簽名/簽名不匹配
- 5. 如何簽名未簽名的IPA?
- 6. 簽名與未簽名的apk:classDeffNotFound
- 7. 未簽名並在C中籤名的行爲
- 8. JNLP:在簽名代碼中加載未簽名代碼
- 9. Java,從文件中讀取簽名和未簽名
- 10. 默認在iOS上是char簽名還是未簽名?
- 11. M2crypto簽名與OpenSSL簽名
- 12. Android簽名apk簽名V2
- 13. 簽名簽名,AVR裝配
- 14. 應用程序失敗的代碼簽名驗證。簽名無效,或未使用Apple提交證書籤名
- 15. 未簽名的-1 = -1簽署
- 16. 無法簽署未簽名的APK
- 17. 簽名簿中的清除簽名
- 18. 有趣的未簽名在java中
- 19. 未能在PHP中驗證openssl簽名
- 20. 在clickonce中使用未簽名的dll
- 21. SAML重定向簽名或驗證未能生成正確的簽名
- 22. 彙編代碼如何知道值是否已簽名或未簽名?
- 23. 簽名無效或未與iPhone分銷證書籤訂
- 24. 在MySQL中存儲用戶簽名
- 25. 在android中籤名?
- 26. 證書未正確簽名
- 27. Oauth簽名未生成
- 28. PDF未知簽名圖標
- 29. Java和未簽名字節
- 30. 未知標籤名稱「form_rest」
此外,對於只存儲無符號值的情況,索引的性能會有所提高。就像@ kevin-loney所說,它可以節省索引上限值的時間。請參閱[我寫的文章](http://rakesh.sankar-b.com/2010/08/25/mysql-unsigned-int-to-signed-int-performance-tips-index/)關於使用無符號類型在簽名。 – 2012-07-10 11:58:24