MySQL中有哪些列類型-創(chuàng)新互聯(lián)

MySQL中有哪些列類型,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

在雜多等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計(jì)制作、網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),成都營銷網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站建設(shè)公司,雜多網(wǎng)站建設(shè)費(fèi)用合理。

MySQL列類型選擇和查詢效率有怎樣的聯(lián)系

■使用定長列,不使用可變長列。這條準(zhǔn)則對(duì)被經(jīng)常修改,從而容易產(chǎn)生碎片的表來說特別重要。例如,應(yīng)該選擇CHAR列而不選擇VARCHAR列。所要權(quán)衡的是使用定長列時(shí),表所占用的空間更多,但如果能夠承擔(dān)這種空間的耗費(fèi),使用定長行將比使用可變長的行處理快得多。

■在較短的列能夠滿足要求時(shí)不要使用較長的列。如果正使用的是定長的CHAR列,應(yīng)該使它們盡量短。如果列中所存儲(chǔ)的最長值為40個(gè)字符,那么就不要將其定義為CHAR(255);只要定義為CHAR(40)即可。如果能夠使用MEDIUMINT而不是BIGINT,表將會(huì)更小(磁盤I/O也較少),其值在計(jì)算中也可以處理得更快。

■將列定義為NOTNULL。這樣處理更快,所需空間更少。而且有時(shí)還能簡(jiǎn)化查詢,因?yàn)椴恍枰獧z查是否存在特例NULL。

■考慮使用ENUM列。如果有一個(gè)只含有限數(shù)目的特定值的列,那么應(yīng)該考慮將其轉(zhuǎn)換為ENUM列。ENUM列的值可以更快地處理,因?yàn)樗鼈冊(cè)趦?nèi)部是以數(shù)值表示的。

■使用PROCEDUREANALYSE()。如果使用的是MySQL3.23或更新的版本,應(yīng)該執(zhí)行PROCEDUREANALYSE(),查看它所提供的關(guān)于表中列的信息:

相應(yīng)輸出中有一列是關(guān)于表中每列的很好列類型的建議。第二個(gè)例子要求PROCEDUREANALYSE()不要建議含有多于16個(gè)值或取多于256字節(jié)的ENUM類型(可根據(jù)需要更改這些值)。如果沒有這樣的限制,輸出可能會(huì)很長;ENUM的定義也會(huì)很難閱讀。根據(jù)PROCEDUREANALYSE()的輸出,會(huì)發(fā)現(xiàn)可以對(duì)表進(jìn)行更改以利用更有效的類型。如果希望更改值類型,使用ALTERTABLE語句即可。

MySQL列類型選擇和查詢效率有怎樣的聯(lián)系

■將數(shù)據(jù)裝入BLOB。用BLOB存儲(chǔ)應(yīng)用程序中包裝或未包裝的數(shù)據(jù),有可能使原來需要幾個(gè)檢索操作才能完成的數(shù)據(jù)檢索得以在單個(gè)檢索操作中完成。而且還對(duì)存儲(chǔ)標(biāo)準(zhǔn)表結(jié)構(gòu)不易表示的數(shù)據(jù)或隨時(shí)間變化的數(shù)據(jù)有幫助。在第3章ALTERTABLE語句的介紹中,有一個(gè)例子處理存儲(chǔ)來自Web問卷的結(jié)果的表。該例子中討論了在問卷中增加問題時(shí),怎樣利用ALTERTABLE向該表追加列。

解決該問題的另一個(gè)方法是讓處理Web的應(yīng)用程序?qū)?shù)據(jù)包裝成某種數(shù)據(jù)結(jié)構(gòu),然后將其插入單個(gè)BLOB列。這樣會(huì)增加應(yīng)用程序?qū)?shù)據(jù)進(jìn)行解碼的開銷(而且從表中檢索出記錄后要對(duì)其進(jìn)行編碼),但是簡(jiǎn)化了表的結(jié)構(gòu),并且不用在更改問卷時(shí)對(duì)表進(jìn)行更改。另一方面,BLOB值也有自己的固有問題,特別是在進(jìn)行大量的DELETE或UPDATE操作時(shí)更是如此。刪除BLOB會(huì)在表中留下一個(gè)大空白,在以后將需用一個(gè)記錄或可能是不同大小的多個(gè)記錄來填充。

■對(duì)容易產(chǎn)生碎片的表使用OPTIMIZETABLE。大量進(jìn)行修改的表,特別是那些含有可變長列的表,容易產(chǎn)生碎片。碎片不好,因?yàn)樗诖鎯?chǔ)表的磁盤塊中產(chǎn)生不使用的空間。隨著時(shí)間的增長,必須讀取更多的塊才能取到有效的行,從而降低了性能。任意具有可變長行的表都存在這個(gè)問題,但這個(gè)問題對(duì)BLOB列更為突出,因?yàn)樗鼈兂叽绲淖兓浅4?。?jīng)常使用OPTIMIZETABLE有助于保持性能不下降。

■使用合成索引。合成索引列有時(shí)很有用。一種技術(shù)是根據(jù)其他列建立一個(gè)散列值,并將其存儲(chǔ)在一個(gè)獨(dú)立的列中,然后可通過搜索散列值找到行。這只對(duì)精確匹配的查詢有效。(散列值對(duì)具有諸如“<”或“>=”這樣的操作符的范圍搜索沒有用處)。在MySQL3.23版及以上版本中,散列值可利用MD5()函數(shù)產(chǎn)生。散列索引對(duì)BLOB列特別有用。有一事要注意,在MySQL3.23.2以前的版本中,不能索引BLOB類型。甚至是在3.23.2或更新的版本中,利用散列值作為標(biāo)識(shí)值來查找BLOB值也比搜索BLOB列本身更快。

■除非有必要,否則應(yīng)避免檢索較大的BLOB或TEXT值。例如,除非肯定WHERE子句能夠?qū)⒔Y(jié)果恰好限制在所想要的行上,否則SELECT*查詢不是一個(gè)好辦法。這樣做可能會(huì)將非常大的BLOB值無目的地從網(wǎng)絡(luò)上拖過來。這是存儲(chǔ)在另一列中的BLOB標(biāo)識(shí)信息很有用的另一種情形??梢运阉髟摿幸源_定想要的行,然后從限定的行中檢索BLOB值。

■將BLOB值隔離在一個(gè)獨(dú)立的表中。在某些情況下,將BLOB列從表中移出放入另一個(gè)副表可能具有一定的意義,條件是移出BLOB列后可將表轉(zhuǎn)換為定長行格式。這樣會(huì)減少主表中的碎片,而且能利用定長行的性能優(yōu)勢(shì)。

看完上述內(nèi)容,你們掌握MySQL中有哪些列類型的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

當(dāng)前文章:MySQL中有哪些列類型-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://muchs.cn/article48/dphhep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)網(wǎng)站內(nèi)鏈、Google、企業(yè)建站、建站公司、營銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司