亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

數(shù)據(jù)庫varchar長度最佳實踐

livem / 3452人閱讀

摘要:主要以的或為例,其他數(shù)據(jù)庫中基本也有類型并需要提供長度的參數(shù)。以前的版本的最大長度就是,之后是。而之后表示長度的字節(jié)數(shù)會變成個。盡管是動態(tài)存儲的,但別的數(shù)據(jù)庫引擎不一定是如此。不管其中每一行存儲的數(shù)據(jù)是長還是短。

  

http://dba.stackexchange.com/questions/76469/mysql-varchar-length-and-...

主要以mysql的InnoDB或MyISAM為例,其他數(shù)據(jù)庫中基本也有varchar類型并需要提供長度的參數(shù)。
需要說明的是,例如VARCHAR(3)表示的是這一列最多存3個字符而不是3個字節(jié),比如可以存“一二三”,實際存儲時是編碼為utf-8的。

在mysql中,VARCHAR(3)VARCHAR(255)在存儲方式上是沒有區(qū)別的,都是1個字節(jié)表示字符串長度和字符串經(jīng)utf-8編碼后的字節(jié)。mysql5.0.3以前的版本varchar的最大長度就是255,之后是65535。而VARCHAR(256)之后表示長度的字節(jié)數(shù)會變成2個。其實在今天來說多一個字節(jié)也沒什么區(qū)別,但為了兼容性,通常的數(shù)據(jù)庫設(shè)計中還是會出現(xiàn)很多VARCHAR(255)。

但事實上,把所有較短的字符串列都設(shè)為VARCHAR(255)并不是最好的做法。盡管InnoDB是動態(tài)存儲的,但別的數(shù)據(jù)庫引擎不一定是如此。有的可能會使用固定長度的行,或者固定大小的內(nèi)存表。內(nèi)存表即為sql查詢中產(chǎn)生的臨時表。它通常會為varchar類型分配最大的空間,比如utf-8編碼下,內(nèi)存表可能要為VARCHAR(255)分配2+3×255字節(jié)(2是因為存的是字節(jié)長度而不是字符長度),如果行數(shù)非常多,這也會帶來性能問題。不管其中每一行存儲的數(shù)據(jù)是長還是短。另外也注意到InnoDB的單列索引每個結(jié)點的最大是767字節(jié)(即2+3×255)。

InnoDB最大的行的大小是半個database page(大約8000字節(jié)),如果可變長的列(如varbinary、varchar、text、blob)超過了這個大小會被存到外面去,行里面只是存一個指針。這會比存inline慢很多。提到這個不得不說一下text類型,text的存儲方法應(yīng)該和varchar也沒什么區(qū)別,就是沒有長度的限制,因此它在有join等產(chǎn)生中間結(jié)果的查詢中會非常慢。

所以結(jié)論是,我們應(yīng)該用盡可能小的類型而不是統(tǒng)一用VARCHAR(255)。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/17464.html

相關(guān)文章

  • PHP & MySQL 「數(shù)據(jù)關(guān)聯(lián)一對一」的最佳實踐

    摘要:前言在開發(fā)過程中,通常會遇到很多一對一數(shù)據(jù)的處理情況。關(guān)于可以看我的另一篇文章多維數(shù)組中的。最佳實踐這一次,我們用到了其他兩個函數(shù)。勘誤感謝評論區(qū)對文章內(nèi)容錯誤之處的指出。 前言 在開發(fā)過程中,通常會遇到很多 一對一 數(shù)據(jù)的處理情況。而很多時候我們會要取到的是一個列表,然后列表的單條記錄的對應(yīng)另外一張表,來實現(xiàn)業(yè)務(wù)。比如下面的商品信息 和 商品詳情 兩個表,這里為了演示只是使用了基礎(chǔ)...

    時飛 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<