日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

mysql 字段定義不要用null的原因分析

瀏覽:35日期:2023-10-01 08:09:37
一 NULL 為什么這么經常用

(1) java的null

null是一個讓人頭疼的問題,比如java中的NullPointerException。為了避免猝不及防的空指針,需要小心翼翼地各種if判斷,麻煩又臃腫.

為此有很多的開源包都有諸多處理

common lang3的StringUtils.isBlank(); CollectionUtils.isEmpty();

guava的Optional

甚至java8也引入了Optional來避免這一問題(和guava的大同小異,用法稍有一點點變化)

(2) mysql的null為什么橫行濫用

(a) 創建不規范 null是創建數據表時候默認的,一些mysql客戶端的自動生成表語句里面可能也沒有not null的指定。

(b) 錯誤認識 會有人覺得not null需要更多的空間

(c) 圖省事 null在開發中不用判斷插入數據,寫sql更方便

二 官方文檔

NULL columns require additional space in the rowto record whether their values are NULL. For MyISAM tables, each NULL columntakes one bit extra, rounded up to the nearest byte.

Mysql難以優化引用可空列查詢,它會使索引、索引統計和值更加復雜。可空列需要更多的存儲空間,還需要mysql內部進行特殊處理。可空列被索引后,每條記錄都需要一個額外的字節,還能導致MYisam 中固定大小的索引變成可變大小的索引。 —— 出自《高性能mysql第二版》

如此看來,不指定not null并沒有性能上的優勢。

三 mysql不用null的理由

(1)所有使用NULL值的情況,都可以通過一個有意義的值的表示,這樣有利于代碼的可讀性和可維護性,并能從約束上增強業務數據的規范性。

(2)NULL值到非NULL的更新無法做到原地更新,更容易發生索引分裂,從而影響性能。(null -> not null性能提升很小,除非確定它帶來了問題,否則不要當成優先的優化措施)

(3)NULL值在timestamp類型下容易出問題,特別是沒有啟用參數explicit_defaults_for_timestamp

(4)NOT IN、!= 等負向條件查詢在有 NULL 值的情況下返回永遠為空結果,查詢容易出錯

四 null引發的bad case

數據初始化:

create table table1 ( `id` INT (11) NOT NULL, `name` varchar(20) NOT NULL)create table table2 ( `id` INT (11) NOT NULL, `name` varchar(20))insert into table1 values (4,'zhaoyun'),(2,'zhangfei'),(3,'liubei')insert into table2 values (1,'zhaoyun'),(2, null)

(1)NOT IN子查詢在有NULL值的情況下返回永遠為空結果,查詢容易出錯

select name from table1 where name not in (select name from table2 where id!=1)

+-------------+| name ||-------------|+-------------+

(2) 列值允許為空,索引不存儲null值,結果集中不會包含這些記錄。

select * from table2 where name != ’zhaoyun’

+------+-------------+| id | name ||------+-------------|| | |+------+-------------+

select * from table2 where name != ’zhaoyun1’

+------+-------------+| id | name ||------+-------------|| 1 | zhaoyun |+------+-------------+

(3) 使用concat拼接時,首先要對各個字段進行非null判斷,否則只要任何一個字段為空都會造成拼接的結果為null

select concat('1', null) from dual;

+--------------------+| concat('1', null)||--------------------|| NULL |+--------------------+

(4) 當計算count時候null column不會計入統計

select count(name) from table2;

+--------------------+| count(user_name) ||--------------------|| 1 |+--------------------+五 索引長度對比

alter table table1 add index idx_name (name);alter table table2 add index idx_name (name);explain select * from table1 where name=’zhaoyun’;explain select * from table2 where name=’zhaoyun’;

table1的key_len = 82

table2的key_len = 83

key_len 的計算規則和三個因素有關:數據類型、字符編碼、是否為 NULL

key_len 82 = 20 * 4(utf8mb4 - 4字節, utf8 - 3字節) + 2(存儲varchar變長字符長度為2字節,定長字段無需額外的字節)

key_len 83 = 20 * 4(utf8mb4 - 4字節, utf8 - 3字節) + 2(存儲varchar變長字符長度為2字節,定長字段無需額外的字節) + 1(是否為null的標志)

所以說索引字段最好不要為NULL,因為NULL會使索引、索引統計和值更加復雜,并且需要額外一個字節的存儲空間。

到此這篇關于mysql 字段定義不要用null的分析的文章就介紹到這了,更多相關mysql 字段定義null內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: MySQL 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产日韩欧美一区二区三区| 野花国产精品入口| 国产午夜久久| 99久久精品国产亚洲精品| 国产精品网址| 亚洲激情社区| 久久麻豆精品| 精品国产中文字幕第一页| 欧美专区一区| 日本不卡高清视频| 久久亚洲风情| 亚洲一区网站| 中文精品视频| 国产一区欧美| 亚洲最新无码中文字幕久久| 亚洲综合日本| 欧美特黄一级大片| 亚洲日本网址| 一区二区三区四区日本视频| 精品不卡一区| 欧美激情99| 久久三级毛片| 国产一区丝袜| 黄色精品视频| 久久亚洲精品中文字幕| 国产精品激情| 青青草国产成人99久久| 日本vs亚洲vs韩国一区三区二区| 天使萌一区二区三区免费观看| 激情综合自拍| 欧美精选一区二区三区| 国产99亚洲| 精品一区免费| 黄色成人在线网址| 亚洲欧美日韩国产一区| 久久精品国产大片免费观看| 久久精品国产99国产精品| 国产精品免费大片| 麻豆国产精品一区二区三区| 欧美国产极品| 久久久久久自在自线| 精品国产三区在线| 欧美国产美女| 美女网站视频一区| 精品一区欧美| 免费在线看一区| 日本va欧美va瓶| 国产精品一区二区精品视频观看 | 在线成人动漫av| 亚洲大全视频| 蜜桃视频在线观看一区二区| 日韩不卡一区二区| 久久天堂影院| 久久亚洲精品中文字幕蜜潮电影| 久久五月天小说| 丝袜脚交一区二区| 久久精品97| 国产成人精选| 99热精品在线| 日韩欧美高清一区二区三区| 国产精品久久久久久久久久白浆 | 国产99亚洲| 在线精品亚洲| 国产精品久久久久久久免费软件| 超碰超碰人人人人精品| 国产日韩综合| 亚洲一区二区三区久久久| 亚洲综合色婷婷在线观看| 国产精品多人| 国产精品av久久久久久麻豆网| 亚洲精品日韩久久| 精品美女久久| 亚洲一区国产一区| 免费看久久久| 在线一区免费| 麻豆一区二区在线| 一区二区亚洲精品| 国产精品观看| av不卡在线| 久久久久九九精品影院| 国产韩日影视精品| 日韩av一区二区三区四区| 成人国产精品一区二区网站| 九一成人免费视频| 国产亚洲人成a在线v网站| 日韩电影在线视频| 亚洲精品日韩久久| 日本蜜桃在线观看视频| 三级亚洲高清视频| 久久麻豆视频| 一级成人国产| 亚洲成人二区| 久久99精品久久久野外观看| 国产综合色产| 国产精品自拍区| 伊人久久婷婷| 欧美国产不卡| 亚洲综合色婷婷在线观看| 中文在线资源| 久久精品xxxxx| 午夜在线观看免费一区| 91看片一区| 欧美精品二区| 亚洲一级影院| 国产精品22p| 伊人久久大香伊蕉在人线观看热v| 97精品国产福利一区二区三区| 丝袜脚交一区二区| 日韩av免费| 国产精品久久久久久妇女| 亚洲欧美日韩视频二区| 风间由美中文字幕在线看视频国产欧美| 亚洲一区日韩| 久久久精品网| 国产一区二区色噜噜| 人人精品久久| av资源亚洲| 国产丝袜一区| 久久亚洲视频| 性欧美69xoxoxoxo| 电影亚洲精品噜噜在线观看| 麻豆国产欧美日韩综合精品二区| 免费观看在线色综合| 国产欧美日韩一级| 五月天综合网站| 国产麻豆一区二区三区精品视频| 日本欧美在线看| 性色一区二区| 黄在线观看免费网站ktv| 色婷婷精品视频| 1024精品久久久久久久久| 国产精品一国产精品| 国产精品对白久久久久粗| 欧美日韩一区二区三区四区在线观看 | 日韩久久视频| 成人国产精选| 日韩高清成人| 亚洲一级黄色| 秋霞国产精品| 亚洲在线久久| 国产一区调教| 成人在线视频区| 新版的欧美在线视频| 国产成人精品亚洲日本在线观看| 91精品国产调教在线观看| 精品免费视频| 国产精品成人3p一区二区三区| 精品中文在线| 蜜臀av一区二区三区| 日韩高清在线观看一区二区| 自拍日韩欧美| 亚洲二区三区不卡| 美女尤物久久精品| 亚洲专区一区| 一区二区三区四区日韩| 美女久久久精品| 免费日韩成人| 色综合五月天| 免费视频亚洲| 日本vs亚洲vs韩国一区三区二区| 国产午夜久久av| 成人午夜亚洲| 在线日韩视频| 天堂精品久久久久| 激情久久99| 欧美日韩国产高清| 日韩欧美中文字幕一区二区三区| 国产精品毛片久久久| 福利一区二区| 久久都是精品| 麻豆久久久久久| 免费av一区| 97久久中文字幕| 国产不卡av一区二区| 日韩一级欧洲| 国产精品22p| 午夜免费一区| 国产精品一区二区免费福利视频| 日韩电影免费在线观看| 丝袜美腿成人在线| 国模精品一区| 三级在线观看一区二区| 欧美精品二区| 久久激情婷婷| 欧美一区成人| 欧美一区二区性| 久久国产视频网| 久久网站免费观看| 国产欧美在线| 国产美女精品| 首页国产精品| 亚洲香蕉视频| 91精品一区国产高清在线gif | 亚洲欧美日本国产专区一区| 国产精品香蕉| 日韩一区二区久久| 精品日产乱码久久久久久仙踪林| 亚洲欧美日韩国产一区| 精品久久久久久久| 日韩精品视频在线看|