高效能Mysql(第3版)_資料型別的選擇_整數型別

QingChang發表於2020-12-05

Mysql中整數型別Mysql中整數型別

tinyint,smallint,mediumint,int,bigint(對應尺碼:xs,x,m,l,xl對號入座),其中各佔8,16,24,32,64位儲存空間,儲存範圍是:-2(N-1)~ 2(N-1)-1,tinyint的範圍是-127~128。

unsigned屬性

unsigned屬性:該屬性是整數型別的可選的屬性,表示不允許負值。可以使正數的上限提高一倍,tinyint unsigned 的儲存範圍是0~255.

Mysql可以為整型指定寬度,如int(11),但是這不會限制值的合法範圍,只是規定了Mysql的一些互動工具(例如mysql命令列客戶端)用來顯示的字元的個數,對於儲存和計算來說,int(1)和int(20)是相同的。

標識列的資料型別

在可以滿足值的範圍的需求下,並且預留未來增長空間的前提下,應該選擇最小的資料型別,例如有一個state_id來儲存美國各州的名字,就不需要用幾千或者幾百萬個值,所以不需要使用int,tinyint足夠儲存,而且比int少3個位元組,如果用和這個值作為其他表的外來鍵,3個位元組可能導致很大的效能差異
整數型別通常是標識列的最好的選擇,因為它們很快並且可以使用AUTO_INCREMENT.

整型的外來鍵關聯

一旦選定了一種型別,,要確保在所有關聯表中都使用同樣的型別。型別之間需要精確匹配,包括像unsigned這樣的屬性。混用不同的資料型別可能會導致效能問題,即使沒有效能影響,在比較操作時隱式型別轉換也可能導致很難發現的錯誤,這種錯誤可能很久以後才突然出現,那時候可能都已經忘記是在比較不同的資料型別。

如果使用的是innodb儲存引擎,將不能在資料型別不是完全匹配的情況下建立外來鍵,否則會有報錯資訊“Error 1005 :cant create table”,這個問題在mysql郵件中經常有人抱怨(奇怪的是,在不同長度的varchar列上建立外來鍵又是可以的)

閱讀自156,168頁。

本作品採用《CC 協議》,轉載必須註明作者和本文連結
love ,live in the moment. 如果這篇文章對您有所幫助的話,請點一個贊,謝謝~

相關文章