欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識(shí)庫 > mysql 字段定義不要用null的原因分析

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

熱門標(biāo)簽:高清地圖標(biāo)注道路 云南電商智能外呼系統(tǒng)價(jià)格 大眾點(diǎn)評(píng)星級(jí)酒店地圖標(biāo)注 臨清電話機(jī)器人 話務(wù)外呼系統(tǒng)怎么樣 拉卡拉外呼系統(tǒng) 外東北地圖標(biāo)注 智能外呼系統(tǒng)復(fù)位 400電話可以辦理嗎

一 NULL 為什么這么經(jīng)常用

(1) java的null

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

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

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

guava的Optional

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

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

(a) 創(chuàng)建不規(guī)范 null是創(chuàng)建數(shù)據(jù)表時(shí)候默認(rèn)的,一些mysql客戶端的自動(dòng)生成表語句里面可能也沒有not null的指定。

(b) 錯(cuò)誤認(rèn)識(shí) 會(huì)有人覺得not null需要更多的空間

(c) 圖省事 null在開發(fā)中不用判斷插入數(shù)據(jù),寫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難以優(yōu)化引用可空列查詢,它會(huì)使索引、索引統(tǒng)計(jì)和值更加復(fù)雜。可空列需要更多的存儲(chǔ)空間,還需要mysql內(nèi)部進(jìn)行特殊處理。可空列被索引后,每條記錄都需要一個(gè)額外的字節(jié),還能導(dǎo)致MYisam 中固定大小的索引變成可變大小的索引。 —— 出自《高性能mysql第二版》

如此看來,不指定not null并沒有性能上的優(yōu)勢(shì)。

三 mysql不用null的理由

(1)所有使用NULL值的情況,都可以通過一個(gè)有意義的值的表示,這樣有利于代碼的可讀性和可維護(hù)性,并能從約束上增強(qiáng)業(yè)務(wù)數(shù)據(jù)的規(guī)范性。

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

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

(4)NOT IN、!= 等負(fù)向條件查詢?cè)谟?NULL 值的情況下返回永遠(yuǎn)為空結(jié)果,查詢?nèi)菀壮鲥e(cuò)

四 null引發(fā)的bad case

數(shù)據(jù)初始化:

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子查詢?cè)谟蠳ULL值的情況下返回永遠(yuǎn)為空結(jié)果,查詢?nèi)菀壮鲥e(cuò)

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

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

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

select * from table2 where name != 'zhaoyun'

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

select * from table2 where name != 'zhaoyun1'

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

(3) 使用concat拼接時(shí),首先要對(duì)各個(gè)字段進(jìn)行非null判斷,否則只要任何一個(gè)字段為空都會(huì)造成拼接的結(jié)果為null

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

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

(4) 當(dāng)計(jì)算count時(shí)候null column不會(huì)計(jì)入統(tǒng)計(jì)

select count(name) from table2;

+--------------------+
|   count(user_name) |
|--------------------|
|                  1 |
+--------------------+

五 索引長(zhǎng)度對(duì)比

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 的計(jì)算規(guī)則和三個(gè)因素有關(guān):數(shù)據(jù)類型、字符編碼、是否為 NULL

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

key_len 83 = 20 * 4(utf8mb4 - 4字節(jié), utf8 - 3字節(jié)) + 2(存儲(chǔ)varchar變長(zhǎng)字符長(zhǎng)度為2字節(jié),定長(zhǎng)字段無需額外的字節(jié)) + 1(是否為null的標(biāo)志)

所以說索引字段最好不要為NULL,因?yàn)镹ULL會(huì)使索引、索引統(tǒng)計(jì)和值更加復(fù)雜,并且需要額外一個(gè)字節(jié)的存儲(chǔ)空間。

到此這篇關(guān)于mysql 字段定義不要用null的分析的文章就介紹到這了,更多相關(guān)mysql 字段定義null內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 為什么mysql字段要使用NOT NULL
  • MySQL中可為空的字段設(shè)置為NULL還是NOT NULL
  • mysql 求解求2個(gè)或以上字段為NULL的記錄
  • MySQL查詢空字段或非空字段(is null和not null)

標(biāo)簽:阿里 三明 揚(yáng)州 福州 無錫 山西 定西 溫州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《mysql 字段定義不要用null的原因分析》,本文關(guān)鍵詞  mysql,字段,定義,不,要用,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《mysql 字段定義不要用null的原因分析》相關(guān)的同類信息!
  • 本頁收集關(guān)于mysql 字段定義不要用null的原因分析的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    亚洲国产精品久久久久婷婷884 | 欧美日韩美女一区二区| 欧美国产日韩在线观看| 捆绑变态av一区二区三区| 日韩无码精品一区二区| 欧美猛男超大videosgay| 一区二区三区不卡在线观看| 99r精品视频| 国产一区二区伦理| 久久日免费视频| 久久久久国产精品厨房| 狠狠色丁香久久婷婷综合丁香| 成人免费无遮挡无码黄漫视频| 精品欧美久久久| 极品美女销魂一区二区三区| 黄色三级生活片| 国产婷婷色一区二区三区四区| 国产精品一区不卡| 成年人一级黄色片| 亚洲色图视频网站| 特黄特色免费视频| 欧美高清视频一二三区 | yy6080午夜| 欧美成人免费网站| 久久精品国产精品亚洲综合| www..com.cn蕾丝视频在线观看免费版 | 国产精品私人自拍| 国产suv一区二区三区88区| 最新av电影网站| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 91在线视频免费91| 欧美精品精品一区| 麻豆91精品视频| 黑人狂躁日本娇小| 亚洲柠檬福利资源导航| 日韩精品国产一区| 日韩一区二区三区视频在线 | 激情五月激情综合| 《视频一区视频二区| 精品人妻一区二区免费| 欧美成人性战久久| 国产福利91精品| 欧美伊人精品成人久久综合97| 性做久久久久久久久| 成年人免费观看视频网站 | 国产亚洲婷婷免费| 99久久99久久精品免费看蜜桃 | 欧美视频中文字幕| 日韩国产欧美在线观看| 欧美成人久久久免费播放| 综合网在线视频| 国产精品久久AV无码| 欧美国产日韩在线观看| 亚洲 自拍 另类 欧美 丝袜| 26uuu亚洲综合色欧美| 成人黄页毛片网站| 7777精品伊人久久久大香线蕉经典版下载 | 91香蕉视频在线| 日韩欧美国产午夜精品| 国产99精品视频| 4438x成人网最大色成网站| 国产精品影视在线观看| 欧美日韩一本到| 国产精品77777| 91精品久久久久久久久99蜜臂| 国产精品一区一区| 欧美日韩夫妻久久| 国产酒店精品激情| 欧美日本一区二区三区四区| 国产一区二区视频在线播放| 欧美日韩精品一区二区| 国产精品一区二区三区四区| 欧美日本高清视频在线观看| 国产一区91精品张津瑜| 欧美精品欧美精品系列| 国产成人av福利| 日韩免费电影一区| 亚洲丝袜在线观看| 国产午夜三级一区二区三| 在线精品视频播放| 国产精品国产三级国产普通话三级| 国产精品伦子伦| 亚洲色图欧洲色图| 久久精品三级视频| 偷窥国产亚洲免费视频| 色一情一乱一乱一91av| 极品少妇一区二区| 91精品在线观看入口| 暴力调教一区二区三区| 久久久久久久久岛国免费| av天堂一区二区| 亚洲视频免费观看| 懂色av蜜臀av粉嫩av永久| 日韩电影在线一区二区三区| 欧美优质美女网站| 风流少妇一区二区| 国产亚洲成年网址在线观看| 黄色在线观看av| 亚洲一区二区三区影院| 色婷婷一区二区| 国产高清不卡二三区| 精品乱人伦小说| 美女伦理水蜜桃4| 亚洲美女电影在线| av成人免费网站| 国产乱理伦片在线观看夜一区| 欧美成人精品3d动漫h| 国产在线观看免费播放| 亚洲欧美一区二区三区久本道91 | 鲁丝一区二区三区| 日本v片在线高清不卡在线观看| 欧美美女黄视频| 91视频免费播放| 亚洲视频一区二区在线| 日本a级片视频| 粉嫩aⅴ一区二区三区四区五区| 国产欧美一区二区精品性| 鲁丝一区二区三区| 久久99国产精品尤物| 精品久久人人做人人爽| 欧美色图亚洲激情| 男人的天堂亚洲一区| 日韩一级在线观看| 97人妻精品一区二区三区免| 日韩av在线播放中文字幕| 欧美一区二区在线看| 大乳护士喂奶hd| 日本中文字幕一区| 日韩一区二区三区三四区视频在线观看 | 国产麻豆成人精品| 久久精品日韩一区二区三区| 国产成人在线网址| 国产精品一区在线观看你懂的| 国产人成一区二区三区影院| 999精品视频在线观看播放| 国产成人午夜精品5599| 国产精品美女视频| 色综合久久中文综合久久牛| 99热国产精品| 亚洲一区二区精品视频| 91精品国产综合久久福利| 欧美 日本 国产| 毛片av中文字幕一区二区| 精品国产污网站| 国产午夜精品久久久久久久久| 国产大陆精品国产| 成人免费视频在线观看| 欧美日韩午夜在线视频| 在线免费观看a级片| 久久 天天综合| 欧美国产精品专区| 在线观看国产日韩| 中国一级特黄录像播放| 国产中文字幕一区| 日本一二三四高清不卡| 色播五月激情综合网| 国产伦精品一区二区三区88av| 美国一区二区三区在线播放| 中文字幕免费不卡在线| 欧美亚洲尤物久久| 国产精品久久AV无码| 国产九色精品成人porny | 99热这里只有精品4| av高清久久久| 日韩av电影天堂| 国产日本亚洲高清| 在线观看不卡视频| a毛片毛片av永久免费| 国产成人欧美日韩在线电影| 怡红院av一区二区三区| 日韩欧美国产综合在线一区二区三区| 亚洲欧美另类日本| 国产xxx在线观看| 精品亚洲成a人| 亚洲欧洲综合另类| 日韩精品一区二区三区视频| 免费在线观看黄色小视频| 日本精品一二三区| 国产成人综合亚洲91猫咪| 亚洲在线中文字幕| 久久久亚洲综合| 欧美视频三区在线播放| 国产sm调教视频| 91看片淫黄大片一级在线观看| 美腿丝袜亚洲一区| 亚洲欧美一区二区三区久本道91| 日韩欧美第一区| 91黄色免费看| 日本少妇高潮喷水xxxxxxx| 波多野洁衣一区| 久久97超碰国产精品超碰| 亚洲一区在线观看视频| 国产亚洲福利社区一区| 5858s免费视频成人| 黄色a级片在线观看| www.免费av| 97se狠狠狠综合亚洲狠狠| 精品一区二区影视| 亚洲高清在线视频| 国产精品美女视频|