mysql 資料型別選擇

2021-08-29 20:26:34 字數 1973 閱讀 4485

​​​​​​​1.1char與varchar

由於char是固定長度的,所以訪問速度比varchar快。缺點是浪費儲存空間,程式需要對行尾進行處理,所以對那些長度變化不大,並且對查詢速度有較高要求的資料可以通過char來訪問。當然這個也是由不同的儲存引擎來決定的。

myisam 儲存引擎:建議使用固定長度的資料列代替可變長度的資料列。

memory 儲存引擎:目前都使用固定長度的資料行儲存,因此無論使用 char 或varchar 列都沒有關係。兩者都是作為 char 型別處理。

innodb 儲存引擎:建議使用 varchar 型別。對於 innodb 資料表,內部的行儲存格式沒有區分固定長度和可變長度列(所有資料行都使用指向資料列值的頭指標),因此在

本質上,使用固定長度的 char 列不一定比使用可變長度 varchar 列效能要好。因而,主要的效能因素是資料行使用的儲存總量。由於 char 平均占用的空間多於 varchar,因此使用 varchar 來最小化需要處理的資料行的儲存總量和磁碟 i/o 是比較好的

​​​​​​​1.2text與blob

一般在儲存少量字串的時候,我們會選擇 char 或者 varchar;而在儲存較大文字時,通常會選擇使用 text 或者 blob,二者之間的主要差別是 blob 能用來儲存二進位制資料,比如**;而 text 只能儲存字元資料,比如一篇文章或者日記。

blob 和 text 值會引起一些效能問題,特別是在執行了大量的刪除操作時。刪除操作會在資料表中留下很大的「空洞」,以後填入這些「空洞」的記錄在插入的效能上會有影響。為了提高效能,建議定期使用 optimize table 功能對這類表進行碎片整理,避免因為「空洞」導致效能問題。

可以使用合成的(synthetic)索引來提高大文字字段(blob 或 text)的查詢效能。

簡單來說,合成索引就是根據大文字欄位的內容建立乙個雜湊值,並把這個值儲存在單獨的

資料列中,接下來就可以通過檢索雜湊值找到資料行了。

在不必要的時候避免檢索大型的 blob 或 text 值。

把 blob 或 text 列分離到單獨的表中。

浮點數一般用於表示含有小數部分的數值。當乙個欄位被定義為浮點型別後,如果插入資料的精度超過該列定義的實際精度,則插入值會被四捨五入到實際定義的精度值,然後插入,四捨五入的過程不會報錯。在 mysql 中 float、double(或 real)用來表示浮點數。

定點數不同於浮點數.

定點數實際上是以字串形式存放的,所以定點數可以更加精確的儲存資料。如果實際插入的數值精度大於實際定義的精度,則 mysql 會進行警告但是資料按照實際精度四捨五入後插入.

1浮點數存在誤差問題.

2對貨幣等對精度敏感的資料,應該用定點數表示或儲存.

3在程式設計中,如果用到浮點數,要特別注意誤差問題,並盡量避免做浮點數比較.

4要注意浮點數中一些特殊值的處理。

year:根據實際需要選擇能夠滿足應用的最小儲存的日期型別。如果應用只需要記錄「年

份」,那麼用 1 個位元組來儲存的 year 型別完全可以滿足,而不需要用 4 個位元組來

儲存的 date 型別。這樣不僅僅能節約儲存,更能夠提高表的操作效率。

datetime:如果要記錄年月日時分秒,並且記錄的年份比較久遠,那麼最好使用 datetime,而不要使用 timestamp。因為 timestamp 表示的日期範圍比 datetime 要短得多。

timestamp 如果記錄的日期需要讓不同時區的使用者使用,那麼最好使用 timestamp,因為日期型別中只有它能夠和實際時區相對應。

MySQL資料型別 資料型別選擇

在mysq中建立表時,需要考慮為字段選擇哪種資料型別是最合適的。選擇合適的資料型別,會提高資料庫的效率。整數型別和浮點數型別最大的區別在於能否表達小數。整數型別不能表示小數,而浮點數型別可以表示小數。不同的整數型別的取值範圍不同。tinyint型別的取值範圍是0 255。如果欄位的最大值不超過255...

MySQL資料型別選擇

在資料庫設計的時候,如果資料型別選擇不當,可能會對效能造成很大的影響,比如儲存姓名的字段,如果選擇vchar 255 那麼暫用更多的儲存空間,同時也會對io產生影響,因此在資料庫設計時對資料庫資料型別的準確選擇,也會對資料庫的效能有乙個很大的提公升。我在工作中就遇到過很多時候一些開發人員不注意對資料...

mysql 資料型別選擇 Mysql欄位型別選擇

1.欄位型別選擇 1.1盡量少的佔據儲存空間 int整形 年齡 tinyint 1個位元組 0 255之間 烏龜年齡 smallint 2個位元組 0 2的16次方 mediumint 3個位元組 0 2的24次方 int 4個位元組 0 2的32次方 bigint 8個位元組 0 2的64次方 時...