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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- hive NULL值影響HiveNull
- MySQL Innodb 儲存結構 & 儲存Null值 解析MySqlNull
- MySQL 的 NULL 值是怎麼儲存的?MySqlNull
- 淺談索引序列之是否可以儲存NULL值?索引Null
- 【NULL】Oracle null值介紹NullOracle
- 隨筆:MySQL中'' ' ' NULL在Innodb儲存的區別MySqlNull
- mysql探究之null與not nullMySqlNull
- MySQL中is not null和!=null和<>null的區別MySqlNull
- MySQL NULLMySqlNull
- mysql中null與“空值”的坑MySqlNull
- MySQL裡null與空值的辨析MySqlNull
- MySQL案例-TIMESTAMP NOT NULL與NULLMySqlNull
- 資料列not null對索引影響一例Null索引
- 再說索引與Null值對於Hints及執行計劃的影響索引Null
- NULL 值與索引Null索引
- MySQL中IS NULL、IS NOT NULL、!=不能用索引?胡扯!MySqlNull索引
- ((NULL) null).printNULL();((NULL) null).printnull();Null
- 影響儲存網路效能的因素有哪些?
- 影響OLTP 系統效能的儲存因素解析
- Innodb 下null '' ' '的儲存表現的不同Null
- NOT IN子查詢中出現NULL值對結果的影響你注意到了嗎Null
- not-null約束對執行計劃的影響Null
- 面試題((A)null).fun()——java中null值的強轉面試題NullJava
- NULL 值與索引(二)Null索引
- hive中的null值HiveNull
- null(空值)小結Null
- case when遇上null值Null
- mysql 空值(null)和空字元('')的區別MySqlNull字元
- 不再迷惑,無值和 NULL 值Null
- 集合框架能否存null框架Null
- MySQL null和''分析MySqlNull
- mysql分割槽nullMySqlNull
- mysql 查詢欄位為null或者非nullMySqlNull
- 建立單獨的分割槽儲存NULL記錄Null
- IS NULL和IS NOT NULLNull
- MYSQL timestamp NOT NULL插入NULL的報錯問題MySqlNull
- 今天測試了一下mysql的Null值MySqlNull
- MySQL null值欄位是否使用索引的總結MySqlNull索引