檢索效能從快到慢的是(此處是聽人說的):
整數型別
1、tinyint,smallint,mediumint,int,bigint,分別用8,16,24,32,64存
2、整數都有unsigned可選程式設計客棧屬性 (拿tinyint欄位來舉例,unsigned後,欄位的取值範圍是0-255,而signed的範圍是-128 - 127。 那麼如果我們在明確不需要負值存在的情況下,通常是不要設定signed來支援負數的。)
3、對於儲存和計算來說int(1)和int(20)是相同的,int(n)中n只是規定了一些互動工具來顯示字元的個數
字元型別
char定長,儲存效率不如varchar,對於短資料的查詢優於varchar
固定長度的。比如使用uuid作為主鍵,那用char應該更合適。
null型別
1程式設計客棧、索引null列要額外的空間
2、進行比較和計算時會對null值進行處理,可能導致索引失效
所以盡量不要使用null 型別,多使用整數型別
另外,時間日期資料型別
1、不要用字串儲存日期型資料,浪費空間
2、date能儲存從1001到2023年,精度為秒,他把日期和時間封裝到格式為yyyymmddhhmmss的整數中,使用8位元組
3、timestamp儲存了從2023年以來的秒數,和unix時間戳相同,只能儲存1970到2038,使用4位元組
4、from_unixtime()和unix_timestamp()兩個函式轉換日期和unix時間戳
5、date和timestamp中存的是時間,但是是**的時間呢???:前者不管**,他就是乙個時間表示(與時區無關),後者是格林尼治時間。。就是說儲存時date就按照給的時間存,timestamp則是在先根據所在時區和給的時間戳算出對應的格林尼治時間再存,訪問時date就按照他存的時間返回,timestamp則是根據存的時間戳(看作格林尼治時間)和所在時區算出所在時區的對應時間。
6、通常用timestamp,空間效率高
7、mysql沒有提供比秒更小粒度的日期和時間值,如果需要,可以用bigint儲存微妙級別的時間戳,或用double儲存秒之後的小數部分。
實數型別
1、金融類要用decimal
2、decimal可以儲存bigint範圍外的整數
3、float和dorjcunlqnuble使用標準的浮點運算進行近似計算
char 和 varchar
1、char是定長,varchar是變長,也就是varchar節省空間(除非使用row——format=fixed建立的話)
2、因為varchar是變長的,所以update時如果長度變長,就會做額外的工作
3、下列情況使用varchar:字串列的最大長度比平均長度大很多;列的更新很少(所以碎片不是問題);使用了像utf8這樣的字符集(每個字元都使用不同的位元組數進行儲存)
4、char適用情況:很短,或者所有值都接近同乙個長度(如md5);列經常變更
5、末尾空格問題:高版本varchar會保留末尾空格;char和程式設計客棧低版本varchar會剔除末尾空格。
6、char(n),varchar(n)中n表示字元數,而非位元組數(中文字元在utf8中占用3位元組)
7、雖然varchar(n)資料型別在磁碟中存的就是他所表示的字串的大小,但是讀取到記憶體中的時候記憶體是會給他分配n*k+1or2(n<=255,1;else 2;)(k根據字符集決定)
本文標題: 簡單了解mysql儲存字段型別查詢效率
本文位址: /shujuku/mysql/347294.html
mysql欄位型別解析 MySQL欄位型別最全解析
前言 要了解乙個資料庫,我們必須了解其支援的資料型別。mysql 支援大量的字段型別,其中常用的也有很多。前面文章我們也講過 int 及 varchar 型別的用法,但一直沒有全面講過字段型別,本篇文章我們將把字段型別一網打盡,講一講常用字段型別的用法。常用的字段型別大致可以分為數值型別 字串型別 ...
mysql密碼字段型別 MySQL欄位型別最全解析
前言 要了解乙個資料庫,我們必須了解其支援的資料型別。mysql 支援大量的字段型別,其中常用的也有很多。前面文章我們也講過 int 及 varchar 型別的用法,但一直沒有全面講過字段型別,本篇文章我們將把字段型別一網打盡,講一講常用字段型別的用法。常用的字段型別大致可以分為 數值型別 字串型別...
mysql 字段 MySQL欄位型別詳解
mysql支援大量的列型別,它可以被分為3類 數字型別 日期和時間型別以及字串 字元 型別。本節首先給出可用型別的乙個概述,並且總結每個列型別的儲存需求,然後提供每個類中的型別性質的更詳細的描述。概述有意簡化,更詳細的說明應該考慮到有關特定列型別的附加資訊,例如你能為其指定值的允許格式。由mysql...