char、varchar 哪種的搜索效率高


在MySQL 中char 和 varchar 都是存儲字符串的,區別在於char有固定的長度,而varchar屬於可變長的字符類型。
char(M)類型的數據列里,每個值都占用M個字節,如果某個長度小於M,mysql就會在它的右邊用空格字符補足.(在檢索操作中那些填補出來的空格字符將被去掉)在varchar(M)類型的數據列里,每個值只占用剛好夠用的字節再加上一個用來記錄其長度的字節(即總長度為L+1字節)。
char 固定長度,所以在處理速度上要比varchar快速很多,但是對費存儲空間,所以對存儲不大,但在速度上有要求的可以使用char類型。
定長的char的優勢: 
一,存儲很短的信息,比如門牌號碼101,201……這樣很短的信息應該用char,因為varchar還要占1個byte用於存儲信息長度,本來打算節約存儲的現在得不償失。
二,固定長度的。比如使用uuid作為主鍵,那用char應該更合適。因為他固定長度,varchar動態根據長度的特性就消失了,而且還要占1個長度信息。
三,十分頻繁改變的column。因為varchar每次存儲都要有額外的計算,得到長度等工作,如果一個非常頻繁改變的,那就要有很多的精力用於計算,而這些對於char來說是不需要的。
總的說來:char定長,存儲效率不如varchar,對於短數據的查詢優於varchar

 

1.CHAR的長度是固定的,而VARCHAR2的長度是可以變化的, 比如,存儲字符串“abc",對於CHAR (10),表示你存儲的字符將占10個字節(包括7個空字符),而同樣的VARCHAR2 (10)則只占用3個字節的長度,10只是最大值,當你存儲的字符小於10時,按實際長度存儲。 
2.CHAR的效率比VARCHAR2的效率稍高。 
3.目前VARCHAR是VARCHAR2的同義詞。工業標准的VARCHAR類型可以存儲空字符串,但是oracle不這樣做,盡管它保留以后這樣做的權利。Oracle自己開發了一個數據類型VARCHAR2,這個類型不是一個標准的VARCHAR,它將在數據庫中varchar列可以存儲空字符串的特性改為存儲NULL值。如果你想有向后兼容的能力,Oracle建議使用VARCHAR2而不是VARCHAR。 
何時該用CHAR,何時該用varchar2? 
CHAR與VARCHAR2是一對矛盾的統一體,兩者是互補的關系. 
VARCHAR2比CHAR節省空間,在效率上比CHAR會稍微差一些,即要想獲得效率,就必須犧牲一定的空間,這也就是我們在數據庫設計上常說的‘以空間換效率’。 
VARCHAR2雖然比CHAR節省空間,但是如果一個VARCHAR2列經常被修改,而且每次被修改的數據的長度不同,這會引起‘行遷移’(Row Migration)現象,而這造成多余的I/O,是數據庫設計和調整中要盡力避免的,在這種情況下用CHAR代替VARCHAR2會更好一些。

 

我覺得,char是定長的,varchar的長度是變長的,因此相應的char存儲占用要少,varchar占用存儲大。
你的字段長度固定,自然是適合char,占得存儲少,從小的存儲文件中查詢,速度自然就快了。
再者,搜索效率的優化光一個字段類型並起不到決定性的作用。常見的搜索優化方式除了建索引什么的外,對於千萬級以上數據還可以使用
一個比較高效的方式,就是分區分塊。我試過,和你的情況一樣,主鍵,億級數據,分區分塊以后,搜索都是秒級的。

 

"Mysql數據庫,千萬級數據,字段長度固定位8個字符,主鍵,字符類型,具體檢索時定義哪一種數據的搜索效率會比較高。"
需要分情況來決定:
當確定字符串為定長、數據變更頻繁、數據檢索需求少時,使用char;
當不確定字符串長度、對數據的變更少、查詢頻繁時,使用varchar。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM