成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL Schema與數據類型的優化

數據庫 MySQL
如果查詢中包含可為null的列,對Mysql來說更難優化,因為可為null的列使得索引、索引統計和值都比較復雜。可為null的列會使用更多的存儲空間,在mysql中也需要特別處理。當可為null的列被索引時,每個索引記錄需要一個額外的字節。

[[207400]]

選擇優化的數據類型:

1、 更小的通常更好:

一般情況下,應該盡量使用可以正確存儲數據的最小數據類型。更小的數據類型通常更快,因為他們占用更少的磁盤,內存和cpu緩存,并且處理時需要的cpu周期也更少。

2、 簡單就好

簡單的數據類型操作通常需要更少的cpu周期。例如,整型比字符操作代價更低,因為字符集和校對規則(排序規則)使字符比較比整型更加復雜。注:應使用mysql內建的類型存儲時間和日期,而不是字符串。

3、 盡量避免null

如果查詢中包含可為null的列,對Mysql來說更難優化,因為可為null的列使得索引、索引統計和值都比較復雜。可為null的列會使用更多的存儲空間,在mysql中也需要特別處理。當可為null的列被索引時,每個索引記錄需要一個額外的字節。

通常把可為null的列改為not null帶來的性能提升比較小。在調優時,沒有必要首先在現有的shema中查找并修改掉這個情況,除非確定這會導致問題。但是如果列上建索引,就應盡量避免設計成可為null的列。

整數類型:

整數類型有TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT。分別使用8,16,24,32,64位存儲空間。他們可以存儲的值的范圍從-2的(n-1)次方到2的(n-1)次方-1,其中n是存儲空間的位數。

整數類型有可選的UNSIGNED屬性,表示不允許負值,這大致可以是正數的上限提高一倍。例如TINYINT UNSIGNED可以存儲的范圍是0~255,而TINYINT的存儲范圍是-128~127。

實數類型:

實數是帶有小數部分的數字。然后,他們不僅僅為了存儲小數部分;也可以使用DECIMAL存儲比BITINT還大的整數。MYSQL既支持精確類型,也支持不精確類型。

DECIMAL類型用于存儲精確的小數,因為double類型和float類型在進行計算時,會因為精度損失導致一些數據的偏差。但是DECIMAL數據類型cpu不支持對其直接計算,cpu直接支持原生浮點計算,所以浮點運算明顯更快。

因為需要額外的空間和計算開銷,所以應該盡量只在對小數進行精確計算時才使用DECIMAL-例如存儲財務數據。但是在數據量比較大的時候,可以考慮使用BITINT代替DECIMAL,將需要存儲的貨幣單位根據小數的位數乘以相應的倍數即可。

字符串類型(varchar和char)

  • Varchar:

Varchar類型用于存儲可變長字符串,是最常見的字符串類型。他比定長類型更節省空間,因為它僅使用必要的空間(例如,越短的字符串使用越少的空間)。所以,varchar節省了存儲空間,對性能也有幫助。但是,由于行是邊長的,在update是可能使行變得比原來更長,這就導致需要做額外的操作。如果一個行占用的空間增長,并且頁內沒有更多的空間存儲。MyISAM會將行拆成不同的片段存儲,InnoDB則需要分裂頁來使行可以放進頁內。

注:InnoDB更加靈活,它可以把過長的varchar存儲為BLOB。

  • Char類型:

Char類型適合存儲很短的字符串,或者所有值都接近同一個長度。例如,char類型非常適合存儲密碼的md5值,因為他是定長的值。還有用戶的身份證號以及手機號碼。對于經常變更的數據,char也比vachar更好,因為定長的char類型不容易產生碎片。對于非常短的列,char也比varchar在存儲空間上更有效率。例如用char(1)存儲Y和N的值,如果采用單字節字符集只需要一個字節,但是varchar(1)卻需要兩個字節,因為還有一個記錄長度的額外字節。

Varchar(5)和varchar(200)存儲‘hello’時空間開銷是一樣的,但是Varchar(5)會有很大的優勢,因為更長的列會消耗更多的內存,因為Mysql通常會分配固定帶下的內存塊來保存內部值。尤其是使用內存臨時表進行排序和操作時會特別糟糕。在利用磁盤臨時表進行排序時也同樣糟糕。

時間類型

DateTime和TimeStamp

  • DateTime

這個類型能保存大范圍的值,從1001年到9999年,精度為秒。它把日期和時間封裝到格式為YYYYMMDDHHMMSS的整數里,與時區無關。使用8個字節的存儲空間。

  • TimeStamp:

存儲1970年1月1日午夜以來的描述,他和Unix時間戳相同。TimeStamp只使用4個字節的存儲空間,因此它的范圍比DateTime小的多;只能表示從1970年到2038年。

TimeStamp顯示的值也依賴于時區。Mysql服務器,操作系統,以及客戶端連接都有時區設置。

TimeStamp也有DATETIME沒有的特殊屬性。默認情況下,如果插入時沒有指定第一個TimeStamp列的值,Mysql會設置這個列的值為當前時間。在插入一行記錄時,Mysql默認也會更新第一個TimeStamp列的插入和更新操作。最后,TimeStamp列默認為not null,這也和其他的數據類型不一樣。 

責任編輯:龐桂玉 來源: 揚花落盡丶的博客
相關推薦

2020-10-26 07:16:10

MySQLSchema數據

2011-05-11 10:39:01

SQL Serverdatetime數據類優化誤區

2010-08-10 17:17:59

2010-05-17 16:18:28

MySQL數據類型

2010-05-20 18:05:38

2018-01-02 20:35:00

數據庫MySQLDB2

2010-11-29 10:09:26

SQL Server

2017-07-10 13:38:07

MySQL數據類型整數類型

2010-10-08 14:04:44

MySQL數值數據類型

2010-06-10 10:06:01

MySQL數據類型

2018-11-15 09:45:47

JavaScript數據類型變量

2010-10-15 13:28:34

MySql數據類型

2021-05-31 16:09:31

MySQLSchema設計

2010-06-04 11:15:23

MySQL自增主鍵

2010-08-11 09:14:33

DB2數據類型

2010-05-31 10:35:12

MySQL數據類型

2019-08-12 11:40:48

數據庫SQLite3數據類型

2023-04-06 07:49:23

Python數據類型

2010-07-22 17:47:32

SQL Server數

2010-06-13 18:00:56

MySQL數據類型
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 青青草一区二区 | 成人亚洲| 亚洲视频在线看 | 久久久国产视频 | 日韩视频在线观看中文字幕 | 国产线视频精品免费观看视频 | 毛片一级片 | www.黄色片视频 | 亚洲精品3 | 桃色五月 | 久久高潮| 久草免费在线视频 | 黄色一级大片在线免费看产 | 午夜影院在线观看免费 | 91五月天 | 欧美一区二区三区在线观看 | 精品久久久久久国产 | 伊人无码高清 | 九九综合 | 久久久片 | 日韩在线视频免费观看 | 夜夜骑av | 在线视频一区二区 | 国产美女视频黄a视频免费 国产精品福利视频 | 欧美日韩久久 | 久草福利 | 亚洲 欧美 在线 一区 | 精品一区在线免费观看 | 在线视频成人 | 黄色片视频网站 | av色站| 亚洲一区在线播放 | 午夜在线影院 | 亚洲一区视频在线 | 久久久精品一区 | 伊人久久精品一区二区三区 | 激情五月婷婷综合 | 欧美一级大片 | 日韩一区二区三区在线视频 | 日韩精品一区二区三区在线观看 | 日韩视频一区 |