更改MYSQL 單字段存儲(chǔ)最大空間
創(chuàng)新互聯(lián)專注于寧安企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),成都商城網(wǎng)站開發(fā)。寧安網(wǎng)站建設(shè)公司,為寧安等地區(qū)提供建站服務(wù)。全流程按需定制,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
具體的配置是my.ini。
將max_allowed_packet = 16M 拷貝到my.ini中的mysqld分類下,重啟服務(wù),就將更改MYSQL 單字段存儲(chǔ)最大空間改為16M啦
MYSQL 默認(rèn)單字段存儲(chǔ)最大空間為1M.
1. 你數(shù)據(jù)庫字段是什么類型的?
MYSQL數(shù)據(jù)庫中的字段大小如下:
BLOB 64KB
MEDIUMBLOB 16MB
LONGBLOB 4GB
2.我建議使用InputStreamBuffered 性能高
朋友,據(jù)我所知varchar字段類型已經(jīng)夠用了,char類型其長度是固定的,在創(chuàng)建表時(shí)就指定了,
但是varchar類型的長度是可變的,在建表的時(shí)候就制定了最大長度,其最大值可以?。?~65535之間的任意值(長度可以再0到最大值之間) 而且在這個(gè)最大范圍內(nèi),使用多少則分配多大的空間,例如varchar(100),并不是每條記錄都要占用100個(gè)字節(jié)哦!! 最后強(qiáng)調(diào):varchar類型實(shí)際占用的空間為字符串的實(shí)際長度加1 如varchar(10):字段 ‘123’,他占的內(nèi)存字節(jié)是4(3+1),而char(10)則占用了10個(gè)字節(jié)。 全手工,希望朋友采納
對(duì)于大篇幅的文本字段,一般推薦用text和blob數(shù)據(jù)類型定義字段, 有時(shí)候不必在于一點(diǎn)空間的消耗,只要我們?cè)跀?shù)據(jù)庫優(yōu)化做好就夠了
1.mysql在操作數(shù)據(jù)的時(shí)候,以page為單位
??不管是更新,插入,刪除一行數(shù)據(jù),都需要將那行數(shù)據(jù)所在的page讀到內(nèi)存中,然后在進(jìn)行操作,這樣就存在一個(gè)命中率的問題,如果一個(gè)page中能夠相對(duì)的存放足夠多的行,那么命中率就會(huì)相對(duì)高一些,性能就會(huì)有提升
2.innodb的page大小默認(rèn)為16kb
??innodb存儲(chǔ)引擎表為索引組織表,樹底層的葉子節(jié)點(diǎn)為一雙向鏈表,因此每個(gè)頁中至少應(yīng)該有兩行記錄,這就決定了innodb在存儲(chǔ)一行數(shù)據(jù)的時(shí)候不能夠超過8k,但事實(shí)上應(yīng)該更小,有一些InnoDB內(nèi)部數(shù)據(jù)結(jié)構(gòu)要存儲(chǔ)以及預(yù)留操作空間,
3.blob,text大字段
??innodb只會(huì)存放前768字節(jié)在數(shù)據(jù)頁中,而剩余的數(shù)據(jù)則會(huì)存儲(chǔ)在溢出段中(發(fā)生溢出情況的時(shí)候適用),最大768字節(jié)的作用是便于創(chuàng)建前綴索引/prefix index,其余更多的內(nèi)容存儲(chǔ)在額外的page里,哪怕只是多了一個(gè)字節(jié)。因此,所有列長度越短越好
4.擴(kuò)展存儲(chǔ)禁用了自適應(yīng)哈希
??因?yàn)樾枰暾谋容^列的整個(gè)長度,才能發(fā)現(xiàn)是不是正確的數(shù)據(jù)(哈希幫助InnoDB非??焖俚恼业健安聹y的位置”,但是必須檢查“猜測的位置”是不是正確)。因?yàn)樽赃m應(yīng)哈希是完全的內(nèi)存結(jié)構(gòu),并且直接指向Buffer Pool中訪問“最”頻繁的頁面,但對(duì)于擴(kuò)展存儲(chǔ)空間卻無法使用Adaptive Hash
變長大字段類型包括blob,text,varchar,其中varchar列值長度大于某數(shù)N時(shí)也會(huì)存溢出頁,在latin1字符集下N值可以這樣計(jì)算:innodb的塊大小默認(rèn)為16kb,由于innodb存儲(chǔ)引擎表為索引組織表,樹底層的葉子節(jié)點(diǎn)為一雙向鏈表,因此每個(gè)頁中至少應(yīng)該有兩行記錄,這就決定了innodb在存儲(chǔ)一行數(shù)據(jù)的時(shí)候不能夠超過8k,減去其它列值所占字節(jié)數(shù),約等于N。對(duì)于InnoDB,內(nèi)存是極為珍貴的,如果把768字節(jié)長度的blob都放在數(shù)據(jù)頁,雖然可以節(jié)省部分IO,但是能緩存行數(shù)就變少,也就是能緩存的索引值變少了,降低了索引效率
Mysql把每個(gè)BLOB和TEXT值當(dāng)作一個(gè)獨(dú)立的對(duì)象處理。存儲(chǔ)引擎在存儲(chǔ)時(shí)通常會(huì)做特殊處理。當(dāng)BLOB和TEXT值太大時(shí),InnoDB會(huì)使用專門的“外部”儲(chǔ)存區(qū)域來進(jìn)行存儲(chǔ),此時(shí)每個(gè)值在行內(nèi)需要1~4個(gè)字節(jié)存儲(chǔ)一個(gè)指針,然后在內(nèi)部存儲(chǔ)區(qū)域存儲(chǔ)實(shí)際的值。
Mysql不能將BLOB和TEXT列全部長度的字符串進(jìn)行索引
mysql的 io 以page為單位,因此不必要的數(shù)據(jù)(大字段)也會(huì)隨著需要操作的數(shù)據(jù)一同被讀取到內(nèi)存中來,這樣帶來的問題由于大字段會(huì)占用較大的內(nèi)存(相比其他小字段),使得內(nèi)存利用率較差,造成更多的隨機(jī)讀取。從上面的分析來看,我們已經(jīng)看到性能的瓶頸在于由于大字段存放在數(shù)據(jù)頁中,造成了內(nèi)存利用較差,帶來過多的隨機(jī)讀,那怎么來優(yōu)化掉這個(gè)大字段的影響
5.6版本以后,新增選項(xiàng) innodb_page_size 可以修改innodb的page默認(rèn)大小,但并不推薦修改這個(gè)配置
5.6版本之后mysql新增索引FULLTEXT可用來增加大文本搜索速度