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

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

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

瀏覽:32日期:2023-10-01 08:09:37
一 NULL 為什么這么經(jīng)常用

(1) java的null

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

為此有很多的開(kāi)源包都有諸多處理

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

guava的Optional

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

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

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

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

(c) 圖省事 null在開(kāi)發(fā)中不用判斷插入數(shù)據(jù),寫(xiě)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第二版》

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

三 mysql不用null的理由

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

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

(3)NULL值在timestamp類(lèi)型下容易出問(wèn)題,特別是沒(méi)有啟用參數(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ù)類(lèi)型、字符編碼、是否為 NULL

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

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

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

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

標(biāo)簽: MySQL 數(shù)據(jù)庫(kù)
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产传媒在线观看| 欧美1区二区| 成人久久一区| 免费高潮视频95在线观看网站| 欧美极品中文字幕| 国产精品夜夜夜| 日韩av网站免费在线| 久久国内精品| 老司机免费视频一区二区三区| 麻豆精品久久| 中文字幕成在线观看| 亚洲性色av| 狠狠操综合网| 久久香蕉精品| 日韩三级视频| 欧美交a欧美精品喷水| 国产中文字幕一区二区三区| 久久男人av资源站| 91精品在线观看国产| 91九色精品国产一区二区| 蜜臀av免费一区二区三区| 蜜臀av免费一区二区三区| 中文精品在线| 欧美日韩亚洲国产精品| 欧洲av不卡| 蜜桃av一区| 国产精品一站二站| 肉色欧美久久久久久久免费看| 欧美午夜精彩| 亚洲日本在线观看视频| 国产精品久久国产愉拍| 日韩成人亚洲| 亚洲精品综合| 国产精品xxx| 日韩欧美另类一区二区| 99国产精品久久久久久久| 亚洲精品进入| 久久麻豆视频| 午夜欧美精品| 日本99精品| 国产一区二区三区视频在线| 欧美日韩一二| 欧美日韩xxxx| 成人精品天堂一区二区三区| 亚洲乱码一区| 国产91在线精品| 亚洲综合不卡| 精品一区二区三区四区五区| 视频一区中文| 国产精品一区毛片| 91精品久久久久久久久久不卡| 久久国产高清| 精品国产一区二区三区性色av| 1000部精品久久久久久久久| 日韩高清一区| 99视频精品全国免费| 日本欧美一区二区| 99精品一区| 国产精品中文| 在线综合亚洲| 国产不卡人人| 日韩中文字幕| 欧美不卡在线| 精品一区不卡| 日日夜夜免费精品视频| 久久精选视频| 国产精品色婷婷在线观看| 91精品在线观看国产| 国产精品三p一区二区| 欧美在线影院| 日韩.com| 欧美精品影院| 久久亚洲国产精品一区二区| 中文字幕成在线观看| 国产亚洲字幕| 亚洲欧美日韩在线观看a三区| 国精品产品一区| 日本少妇精品亚洲第一区| 欧美日韩国产在线观看网站| 美日韩一区二区三区| 久热精品在线| 日本а中文在线天堂| 日韩激情综合| 亚洲专区欧美专区| 久久精品国语| 97精品中文字幕| 免费一级欧美片在线观看网站| 蜜桃久久精品一区二区| 亚洲成人av观看| 精品久久久网| 国产精品久久久久久久久久齐齐 | 国产成人免费精品| 中文字幕av亚洲精品一部二部| 999国产精品999久久久久久| 成人台湾亚洲精品一区二区| 日本免费新一区视频| 美国三级日本三级久久99 | 午夜精品亚洲| 日韩国产一区二区| 国产精品久久久久久久久久齐齐| 蜜桃视频一区二区三区在线观看| 欧美日韩国产一区二区三区不卡| 国产96在线亚洲| 久久精品国产99国产| 国产亚洲精品美女久久 | 野花国产精品入口| 欧美日韩中文字幕一区二区三区| 日韩av在线中文字幕| 久久免费福利| 国产精品17p| 日韩av一二三| 日韩精品一区二区三区中文| 亚洲伊人精品酒店| 蜜桃免费网站一区二区三区| 午夜一区在线| 午夜在线一区| 玖玖精品视频| 久久亚洲色图| 综合国产视频| 亚洲精品影院在线观看| 一区二区不卡| 日韩二区三区在线观看| 日韩在线黄色| 91亚洲精品在看在线观看高清| 日韩免费精品| 日韩精品91亚洲二区在线观看| 午夜国产欧美理论在线播放| 中文字幕人成乱码在线观看| 国产精品17p| 国产麻豆一区二区三区 | 国产精品地址| 麻豆精品一区二区综合av| 欧美激情麻豆| 成人在线丰满少妇av| 欧美亚洲日本精品| 久久免费大视频| 国产精品老牛| 亚洲va久久| 国产精品白丝久久av网站| 欧美日韩亚洲三区| 国产精品久久久久久久久免费高清| 国产剧情一区| 欧美www视频在线观看| 人人草在线视频| 亚洲性色视频| 男人操女人的视频在线观看欧美 | 欧美专区18| 日本综合视频| 久久99国产精品视频| 久久免费影院| 日韩av首页| 99视频+国产日韩欧美| 欧美专区18| 日韩av一二三| 久久精品色播| 欧美日韩三区| 91综合久久爱com| 国产999精品在线观看| 国产99精品| 亚洲精品成人一区| 国产专区精品| 99综合视频| 国产精品久久久久久久久久齐齐 | 老司机精品视频网| 欧洲亚洲一区二区三区| 日韩精品一二三| 国产精品调教视频| 国产va在线视频| 乱人伦精品视频在线观看| 日本91福利区| 在线天堂资源www在线污| 99香蕉国产精品偷在线观看| 四虎精品一区二区免费| 卡一卡二国产精品| 黄色欧美日韩| 国产精品主播在线观看| 久久久久99| 亚洲一区有码| 精品一级视频| 国产精品普通话对白| 欧美激情aⅴ一区二区三区 | 久久高清精品| 亚洲2区在线| 最新中文字幕在线播放| 亚洲视频电影在线| 国产网站在线| 少妇精品久久久一区二区| 国产精品久久久久蜜臀 | 男女性色大片免费观看一区二区| 国产精品一国产精品k频道56| 精品欧美激情在线观看| 国产精品主播| 欧美成人综合| 精品资源在线| 日韩精品一区二区三区中文字幕| 日韩欧美一区二区三区在线视频 | 久久久一本精品| 日韩精品一级| 欧洲av不卡| 国产精品亲子伦av一区二区三区|