Sql Server 參考:char與varchar的選擇
char(或是nchar)與varchar(或是nvarchar)是資料庫中最常見的用於儲存字元資料的資料型別,由於它們大多數特性相同,因此在選擇使用哪種型別字元資料時,
可能會有一些疑惑。不過,通過一些比較和測試,還是可以較為容易地根據實際的需要來選擇它們。
1. char與varchar的比較
下面是使用char與varcahr的一些結果。
(1)資料儲存開銷。
a. 每個varchar列需要額外的兩個位元組,用於反映儲存的資料的長度。
b. 每個可為NULL的char列,需要一些位元組(空點陣圖)來反應資料的為空性。
c. 無論實際資料的長度是多少,char按照定義的長度分配儲存空間。
d. varchar根據實際儲存的資料長度來分配資料儲存空間。
(2) NULL值。
a. char列的NULL值佔用儲存空間。
b. varcahr列的NULL值不佔用儲存空間。
c. 插入同樣數量的NULL值,varchar列的插入效率明顯高出char列。
(3) 插入資料。無論插入資料涉及的列是否建立索引,char的效率都明顯低於varchar。
(4) 更新資料
如果更新的列上未建立索引,則char的效率低於varchar,差異不大;建立索引的話,效率差異較大。
(5) 修改結構
a. 無論增加或是刪除的列的型別是char還是varchar,操作都能較快的完成,而且效率上沒有什麼差異。
b. 對於增加列的寬度而言,char與varchar有非常明顯的效率差異,修改varcahr列基本上不花費時間,而修改char列需要花費很長的時間。
(6) 資料檢索。無論是否通過索引,varchar型別的資料檢索略優於char的掃描。
2. 選擇char還是選擇varchar的建議
(1) 適宜於char的情況:
a. 列中的各行資料長度基本一致,長度變化不超過50位元組;
b. 資料變更頻繁,資料檢索的需求較少。
c. 列的長度不會變化,修改char型別列的寬度的代價比較大。
d. 列中不會出現大量的NULL值。
e. 列上不需要建立過多的索引,過多的索引對char列的資料變更影響較大。
(2) 適宜於archar的情況;
a. 列中的各行資料的長度差異比較大。
b. 列中資料的更新非常少,但查詢非常頻繁。
c. 列中經常沒有資料,為NULL值或為空值。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-609723/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【TUNE_ORACLE】列出走了低選擇性索引的SQL參考Oracle索引SQL
- 深入char、varchar、text
- varchar和char的區別
- MySQL資料型別操作(char與varchar)MySql資料型別
- 【TUNE_ORACLE】檢視每個列的選擇性和基數SQL參考OracleSQL
- 初學Linux最初選擇系統參考Linux
- MySQL 中 VARCHAR 最大長度及 CHAR 和 VARCHAR 的區別MySql
- SQL Server 2014的資料庫引擎新增功能(參考sqlserver官方文件)SQLServer資料庫
- MySQL中CHAR和VARCHAR區別MySql
- MySQL中int、char、varchar的效能淺談MySql
- 【TUNE_ORACLE】列出可以建立組合索引的SQL(回表再過濾選擇性高的列)的SQL參考Oracle索引SQL
- SQL優化參考SQL優化
- Windows Server和SQL Server客戶繼續選擇Azure的三個原因WindowsServerSQL
- 選擇CRM系統有哪些指標可以參考?指標
- NTMySQL中varchar和char型別的區別heeMySql型別
- SQL 選擇SQL
- 資料庫SQL Server 2016“功能選擇”詳細說明及精簡安裝選擇資料庫SQLServer
- 【TUNE_ORACLE】列出索引被哪些SQL引用的SQL參考Oracle索引SQL
- 【TUNE_ORACLE】ROWID切片SQL參考OracleSQL
- HANA SQL參考及Oracle對照SQLOracle
- 【TUNE_ORACLE】列出走了Filter的SQL參考OracleFilterSQL
- 關於mysql設定varchar 欄位的預設值''和null的區別,以及varchar和char的區別MySqlNull
- 【TUNE_ORACLE】列出帶有自定義函式的SQL的SQL參考Oracle函式SQL
- 【TUNE_ORACLE】列出LOOP套LOOP的PL/SQL程式碼SQL參考OracleOOPSQL
- 教材與參考文獻
- SonarQube之採購選型參考
- Spark 模型選擇和調參Spark模型
- 【TUNE_ORACLE】列出SQL謂詞中需要建立索引的列SQL參考OracleSQL索引
- SVM 的核函式選擇和調參函式
- 【TUNE_ORACLE】列出有標量子查詢的SQL參考OracleSQL
- 【TUNE_ORACLE】列出走了INDEX FULL SCAN的SQL參考OracleIndexSQL
- 【TUNE_ORACLE】檢視錶的總塊數SQL參考OracleSQL
- 【TUNE_ORACLE】檢視索引的叢集因子SQL參考Oracle索引SQL
- 【TUNE_ORACLE】查出所有有“select *”語句的SQL參考OracleSQL
- 【TUNE_ORACLE】列出走了INDEX SKIP SCAN的SQL參考OracleIndexSQL
- 【TUNE_ORACLE】列出走了TABLE ACCESS FULL的SQL參考OracleSQL
- 【TUNE_ORACLE】列出一條SQL中多次出現的表名的SQL參考OracleSQL
- 如何選擇資料庫伺服器,參考這幾點讓你不再被坑資料庫伺服器
- CH395的FTP Server(主動模式)簡單應用參考FTPServer模式