MySQL 資料型別選擇原則

2022-09-21 23:30:16 字數 2540 閱讀 1967

通常來說,盡可能使用占用儲存空間小的資料型別來儲存資料。這類資料型別通常也會更快,並且占用的磁碟空間、記憶體乃至快取都更小,而且占用的 cpu 處理週期也少。

但是,務必準確估計要儲存的資料值的範圍。因為在資料表結構的多個地方擴充資料範圍會是乙個痛苦且耗時的過程。如果在猶豫哪種資料型別合適,那就選擇你認為不會超出範圍的最小空間的型別(在系統早期或者資料表 資料不多的情況下也可以進行調整)。

資料型別越簡單意味著處理資料的 cpu 週期越少。例如,整型相比字元型而言,處理起來更容易,這是因為字符集和比對使得字元的比較更複雜。舉兩個例子:應該使用 mysql 內建的型別來儲存時間和日期,而不是字串。ip 位址也應該使用整型儲存。

很多資料表都是要可為空的列,雖然在應用中並不需要儲存預設值null。通常來說,指定列為 not null 會比儲存 null 要更優。

mysql 對於涉及到可為空的列優化起來更為困難,這是因為空值列使得索引、索引統計和值比較都變得複雜。而且,可為空的列佔據的儲存空間更大,且需要特殊的處理。如果在可為空的列上指定了索引,這會需要每個索引入口多乙個額外的位元組,甚至會導致 myisam 引擎固定大小的索引轉換為可變大小的索引(例如對整數型欄位做單列索引)。 不過,將 null 列轉換為 not null列的效能改進通常並不大。因此,除非已經發現了 null 列對效能有很大的影響,否則不要優先去對已有的資料表結構進程式設計客棧行改動。但是,如果需要對列構建索引,那應該盡量避免該列值可以為空,通常好的習慣是直接設定該列為 not null。

當然,也有例外,例如在 innodb 中僅僅使用了乙個 bit 來儲存 null 值,因此對大量資料儲存來說可以有效節省空間,但是如果是 myisam 引擎就不是這樣了。

選擇資料型別的第一步是決定資料列使用哪種常用的資料型別來表示,是數值型、字串型還是時間型別。通常直接選擇就挺不錯的,但是在某些情況下會有特殊(比如金額、時間戳)。

第二步就是選擇具體的型別。mysql對於同一種資料型別會有多種儲存方式,基於資料值範圍、精度以及儲存的物理空間,而還有些資料型別有一些特殊的屬性。

例如,datetime 和 timestamp 都可以儲存時間和日期,都可以精確到秒。然而,timestamp 型別只需要一半的儲存空間,並且包括了時區資訊,還支援自動更新。但另一方面,它儲存的時間範圍更小,它的這些特殊特性可能變成障礙。

再來看看基本資料型別。mysql 支援資料型別的別名,例如 integer,bool 和 numeric。這些僅僅是別名,雖然看起來會讓人困惑,但是實際上對效能沒有影響。如果使用了別名資料型別建立資料表,可回憶使用 show create table,可以看到實際上 mysql 會轉換為基礎資料型別,而不是別名。

資料型別:定義列中可以儲存什麼資料以及該資料實際怎樣儲存的基本規則。

資料型別用於以下目的:

1、允許限制可儲存在列中的資料。如:數值資料型別列只能接受數值。

2、允許在內部更有效地儲存資料。如:用比文字串更簡潔的格式儲存數值和日期時間值。

3、允許變換排序順序。如:資料都作為串處理,則1位於10前,10位於2前(串以字典順序排序,從左邊開始比較,一次乙個字元);作為數值資料型別,數值才能正確排序。

最常用的資料型別,儲存串,如名字、位址、**號碼等。

兩www.cppcns.com種基本的串型別:定長串和變長串。

定長串:接受長度固定的字串,其長度是在建立表時指定的。定長列不允許多於指定的字元數目,它們分配的儲存空間與指定的一樣多。如:char。

變長串:儲存可變長度的文字。有些變長資料型別具有最大的定長,有些則是完全變長的,不管是哪種,只有指定的資料會得到儲存(額外的資料不儲存),如:text。

ps:mysql處理定長列遠比處理變長列快得多。且mysql不允許對變長列(或乙個列的可變部分)進行索引。

資料型別說明:

ps:1、引號:使用何種形式的串資料型別,串值都必須括在引號內(通常使用單引號)。

2、須遵守的基本規則:如果數值是計算(求和、平均等)中使用的數值,則儲存在數值資料型別列中。如果數值作為字串使用,則儲存在串資料型別列中。如:在數值字段中儲存郵政編碼01234,儲存的是數值1234,丟失了一位數字。

儲存數值。mysql支援多種數值資料型別,每種儲存的數值具有不同的取值範圍。

支援的取值範圍越大,所需儲存空間越多。此外,有的數值資料型別支援使用十進位制小數點(和小數),而有的則只支援整數。表d-2列出了常用的mysql數值資料型別。

ps:1、所有數值資料型別(除bit和boolean外)都可以有符號或無符號。有符號數值列可以儲存正或負的數值,無符號數值列只能儲存正數。

2、預設情況為有符號,若不需要儲存負值,可以使用unsigned,這樣做將允許你儲存兩倍大小的值。

3、與串不同,數值不應該在引號內。

4、mysql中沒有專門儲存貨幣的資料型別,一般情況下使用decimal(8, 2)。

資料型別說明:

資料型別說明:

可儲存任何資料(甚至包括二進位制資訊),如影象、多**、字處理文件等。

資料型別說明:

mysql 的資料表示方式很多,建議了解常用的資料型別的儲存範圍,佔據的位元組數,盡可能地根據產品預估資料值範圍或長度,選擇合適的資料型別,從而在建立表一開始就注重效能。後期再來調整的代價往往超出設計之初付出的細緻思考的時間成本。

MySQL資料型別 資料型別選擇

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

MySQL資料型別選擇

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

mysql 資料型別選擇

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