MySQL null值儲存,null效能影響
-
MySQL null值的儲存
mysql> create table mytest(t1 varchar(10),t2 varchar(10),t3 varchar(10) ,t4 varchar(10))engine=innodb charset = latin1 row_format=compact; Query OK, 0 rows affected (0.08 sec) mysql> insert into mytest values('a','bb','bb','ccc'); Query OK, 1 row affected (0.02 sec) mysql> insert into mytest values('a','ee','ee','fff'); Query OK, 1 row affected (0.01 sec) mysql> insert into mytest values('a',NULL,NULL,'fff'); Query OK, 1 row affected (0.00 sec)
測試資料準備完之後,執行shell命令:
/usr/local/mysql/test# hexdump -C -v mytest.ibd > /tmp/mytest.txt 0000c070 73 75 70 72 65 6d 75 6d 03 02 02 01 00 00 00 10 |supremum........| ----------->一行,16位元組 0000c080 00 25 00 00 00 03 b9 00 00 00 00 02 49 01 82 00 |.%..........I...| 0000c090 00 01 4a 01 10 61 62 62 62 62 63 63 63 03 02 02 |..J..abbbbccc...| 0000c0a0 01 00 00 00 18 00 23 00 00 00 03 b9 01 00 00 00 |......#.........| 0000c0b0 02 49 02 83 00 00 01 4b 01 10 61 65 65 65 65 66 |.I.....K..aeeeef| 0000c0c0 66 66 03 01 06 00 00 20 ff a6 00 00 00 03 b9 02 |ff..... ........| 0000c0d0 00 00 00 02 49 03 84 00 00 01 4c 01 10 61 66 66 |....I.....L..aff| 0000c0e0 66 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |f...............| 解釋: 第一行資料: 03 02 02 01 /*變長欄位*/ ---- 表中4個欄位型別為varchar,並且沒有NULL資料,而且每個欄位君小於255。 00 /*NULL標誌位,第一行沒有null的資料*/ 00 00 10 00 25 /*記錄頭資訊,固定5個位元組*/ 00 00 00 03 b9 00 /*RowID,固定6個位元組,表沒有主鍵*/ 00 00 00 02 49 01 /*事務ID,固定6個位元組*/ 82 00 00 01 4a 01 10 /*回滾指標,固定7個位元組*/ 61 62 62 62 62 63 63 63 /*列的資料*/ 第二行資料和第一行資料一樣(顏色匹配)。 第三行資料(有NULL值)和第一行的解釋的顏色對應起來比較差別: 03 02 02 01 VS 03 01 ----------當值為NULL時,變長欄位列表不會佔用儲存空間。 61 62 62 62 62 63 63 63 VS 61 66 66 66 --------- NULL值沒有儲存,不佔空間 結論:當值為NULL時,變長欄位列表不會佔用儲存空間。NULL值沒有儲存,不佔空間,但是需要一個標誌位(一行一個)。 結論:列資料資訊裡表明了 NULL資料和''資料都不佔用任何空間,對於變長欄位列表的資訊,和一對比得出:‘’資料雖然不需要佔用任何儲存空間,但是在變長欄位列表裡面還是需要佔用一個位元組<畢竟還是一個‘’值>,NULL值不需要佔用”,只是NULL會有額外的一個標誌位,所以能有個最佳化的說法:“資料庫表中能設定NOT NULL的就儘量設定為NOT NULL,除非確實需要NULL值得。”
2. MySQL null效能的影響
(1). B樹索引時不會儲存NULL值的,所以如果索引的欄位可以為NULL,索引的效率會下降很多。
(2). 對空值的判斷或者濾出處理,在業務上容易出現混亂。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25380026/viewspace-2645356/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL 的 NULL 值是怎麼儲存的?MySqlNull
- 【NULL】Oracle null值介紹NullOracle
- 隨筆:MySQL中'' ' ' NULL在Innodb儲存的區別MySqlNull
- MySQL NULLMySqlNull
- mysql中null與“空值”的坑MySqlNull
- MySQL中IS NULL、IS NOT NULL、!=不能用索引?胡扯!MySqlNull索引
- Innodb 下null '' ' '的儲存表現的不同Null
- MYSQL timestamp NOT NULL插入NULL的報錯問題MySqlNull
- MySQL null和''分析MySqlNull
- mysql 空值(null)和空字元('')的區別MySqlNull字元
- 集合框架能否存null框架Null
- NOT IN子查詢中出現NULL值對結果的影響你注意到了嗎Null
- 影響儲存網路效能的因素有哪些?
- 面試題((A)null).fun()——java中null值的強轉面試題NullJava
- MySQL null值欄位是否使用索引的總結MySqlNull索引
- 今天測試了一下mysql的Null值MySqlNull
- MySQL NOT NULL列用 WHERE IS NULL 也能查到資料的原因MySqlNull
- 你還不知道mysql中空值和null值的區別嗎?MySqlNull
- SQL 查詢中的 NULL 值SQLNull
- 去除陣列中的 null 值陣列Null
- 替換NULL值幫助文件Null
- FastJson 序列化處理 null 值ASTJSONNull
- 如何在es中查詢null值Null
- PostgreSQL排序把null值排在後面SQL排序Null
- 資料庫系統 空值 null資料庫Null
- 為什麼不建議給MySQL設定Null值?《死磕MySQL系列 十八》MySqlNull
- PropertyChanged == nullNull
- [20231024]NULL值在索引的情況.txtNull索引
- mysql遇到Variable can’t be set to the value of ‘NULL’MySqlNull
- MySQL為何不建議使用null列MySqlNull
- MySQL中case?when對NULL值判斷的踩坑記錄RTGYMySqlNull
- 影響mysql效能的因素都有哪些MySql
- 影響MySQL效能的硬體因素MySql
- 影響MySQL效能的硬體因MySql
- 2>/dev/null和>/dev/null 2>&1和2>&1>/dev/null的區別devNull
- NULL列時,如何使得IS NULL或者IS NOT NULL可以使用索引來提高查詢效率Null索引
- 為什麼索引無法使用is null和is not null索引Null
- 【C#】-對於Null值的處理方法C#Null