日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

面试官问,为什么建议MySQL列属性尽量用 NOT NULL ?

發(fā)布時間:2024/4/11 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面试官问,为什么建议MySQL列属性尽量用 NOT NULL ? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

點擊上方“朱小廝的博客”,選擇“設(shè)為星標

回復”1024“獲取獨家整理的學習資料


寫這篇文章,來自一個小伙伴的提問,他在二面的過程中被問到,由于他簡歷中寫道有 MySQL 調(diào)優(yōu)經(jīng)驗,但這個問題沒有回答好,二面被刷了。

其實我們剛學習 C 語言的時候,就接觸過 NULL,比如下面這句代碼。

int *p = NULL;

它實際上表示將指針指向一塊不被使用的內(nèi)存地址,一般會在宏中定義好。

那么我們常用的 Java 語言,同樣也用到 null,表示一個空引用,如果你不小心引用了,那么就會拋出 NullPointerException,就像昨天 Reddit 上面很火的一張圖。

其實很早之前 guava 就提供了 Optional 容器類來處理 null,其目的便是避免猝不及防的空指針。后來 java8 直接引入了 Optional,功能一樣,用法上稍稍有點變化。其實還有很多開源框架,比如 Spring,common lang3等,也提供了處理空的工具類,如。

StringUtils.isBlank();? ?

CollectionUtils.isEmpty();

那么在 MySQL 中,NULL 表示不知道的數(shù)據(jù)。


我們在設(shè)計表的時候,經(jīng)常會有老司機這么告訴我們。


字段盡可能用NOT NULL,而不是NULL,除非特殊情況。


這句話到底有沒有錯?


可以負責任的告訴你這句話沒有錯,也不是以訛傳訛,這句話首次出現(xiàn)在 MySQL 官網(wǎng)。

如果你讀過《高性能 MySQL》這本書,你應(yīng)該會看到這么一段,在 4.1 節(jié)提到。

由此看來,把 NULL 改成 NOT NULL 對索引的性能并沒有明顯的提升。避免使用 NULL 的目的,是便于代碼的可讀性和可維護性。同時也便于避免下文即將出現(xiàn)的一些稀奇古怪的錯誤。


好了,下面咱們通過實驗來看看,使用 NULL 會出現(xiàn)那些稀奇古怪的錯誤呢?


跟我一樣在本地建兩個表 t1,t2;其中一個表 name 字段允許為空,另一個表 name 字段不允許為空,分別對 name 字段建立索引,SQL 語句如下


1、NOT IN、!= 等負向條件查詢在有 NULL 值的情況下返回非空行的結(jié)果集


比如上例中的 t2,我執(zhí)行如下 SQL 語句

SELECT * from t2 where name != '張三'

你本打算返回 id 為 2 的那行數(shù)據(jù),然而什么都沒有。



又比如這條 SQL 語句

select * from t2 where name not in (select name from t2 where id!=1)

也返回了空結(jié)果集


2、使用 concat 函數(shù)拼接時,首先要對各個字段進行非 NULL 判斷,否則只要任何一個字段為空都會造成拼接的結(jié)果為 NULL


比如下面這條 SQL 語句

SELECT CONCAT("1",NULL)


3、當用count函數(shù)進行統(tǒng)計時,NULL 列不會計入統(tǒng)計

SELECT count(name) from t2


4、查詢空行數(shù)據(jù),用 is NULL

SELECT * FROM t2 where name is NULL


5、NULL 列需要更多的存儲空間,一般需要一個額外的字節(jié)作為判斷是否為 NULL 的標志位。


如果你仔細觀察 t1 和 t2 表的 key_len,會發(fā)現(xiàn) t2 比 t1 多了一個字節(jié)。

explain SELECT * from t2 where name = '張三'


explain SELECT * from t1 where name = '張三'


key_len 的長度一般跟這三個因素有關(guān),分別是數(shù)據(jù)類型,字符編碼,是否為 NULL。


因此,t2 比 t1 多出的這一個字節(jié),用于作為判斷是否為 NULL 的標志位了。


馬蛋,原來一切都在書中。如果面試的哪位同學多讀幾篇《高性能 MySQL》這本書,那個崗位就是他的了,但沒有那么多如果...


在此,建議大家多看官方文檔,多讀點好書,多關(guān)注一些良心的原創(chuàng)技術(shù)自媒體,不要看那些無憑無據(jù)的文章,反而會以訛傳訛,貽害無窮。



想知道更多?描下面的二維碼關(guān)注我

相關(guān)推薦:

  • 《科普 | 明星公司之Netflix》

  • 《看我如何作死 | 將CPU、IO打爆》

  • 《看我如何作死 | 網(wǎng)絡(luò)延遲、丟包、中斷一個都沒落下》

  • 《7102-2019年技術(shù)文全套整理,建議收藏》

  • 《看我如何假死!》

  • 《總結(jié)緩存使用過程中的幾種策略以及優(yōu)缺點組合分析》


加技術(shù)群入口(備注:技術(shù)):>>>Learn More<<


免費資料入口(備注:1024):>>>Learn More<<


免費星球入口(有需要的+):




點個"在看"唄^_^

總結(jié)

以上是生活随笔為你收集整理的面试官问,为什么建议MySQL列属性尽量用 NOT NULL ?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 在线观看三级视频 | 少妇被躁爽到高潮 | 蜜桃在线一区 | 精品无码人妻一区二区三 | 免费成人在线网站 | 欧美性第一页 | 伊人色av| 欧美成人va | 亚洲国产精品成人va在线观看 | 捆绑束缚调教 | 亚洲精品免费看 | 日产国产亚洲精品系列 | 99国产精品免费视频 | 韩国美女一区二区 | 女性向av免费网站 | 亚洲国产精一区二区三区性色 | 亚洲精品理论 | 中文字字幕| 欧美射射射 | 女同久久另类69精品国产 | 人妻久久一区二区 | 男女激情视频网站 | 五月婷婷综合久久 | 蜜桃av色偷偷av老熟女 | 日韩网站在线 | 成人在线免费电影 | 一区二区三区免费高清视频 | 亚洲自拍偷拍av | 极品另类 | 日韩av不卡一区 | 在线精品国产 | 又黄又免费的网站 | 本庄优花番号 | 高潮毛片 | 国产精品自拍亚洲 | 国产亚洲精品精品国产亚洲综合 | 日韩精品一区二区在线看 | 成年视频在线观看 | 伊人黄色 | 波多野结衣一区二区三区在线观看 | 欧美性在线视频 | 久久久久久久久艹 | 国产一区二区黑人欧美xxxx | 男女视频免费网站 | a级黄色在线观看 | 丁香婷婷色 | 懂色av一区二区夜夜嗨 | 亚洲aaa级 | 亚洲视频第一页 | 丰满少妇高潮一区二区 | 欧美成人三级在线视频 | 96福利视频 | 在线观看国产一级片 | 日本黄色网址大全 | 热热色av | 特黄三级 | 欧美成人xxxx | 国产又粗又长又黄视频 | 入禽太深免费视频 | 极品在线观看 | 视频免费在线观看 | 国产黄视频网站 | 精品丰满人妻无套内射 | 国产88av| 国产精品海角社区 | 精品人成 | 成人做爰免费视频免费看 | 久久99在线| 天天有av | 久久久不卡国产精品一区二区 | 欧美中文字幕在线视频 | 成年人黄色大全 | 一出一进一爽一粗一大视频 | 在线观看黄 | 欧美日韩精品久久久免费观看 | 校园春色亚洲色图 | 青春草久久| 午夜三级网站 | 波多野结衣中文一区 | 91在线观看免费高清完整版在线观看 | 深夜福利免费在线观看 | 亚洲黄色在线播放 | 久久99视频 | 99免费在线 | 日本护士体内she精2xxx | 白丝开裆喷水 | 国产无码久久精品 | 91高潮大合集爽到抽搐 | 在线免费观看a级片 | 黄色一级a毛片 | 九九视屏 | 国产三级按摩推拿按摩 | 人成在线免费视频 | 爱情岛论坛永久入口 | 国产美女精品人人做人人爽 | 成年人视频在线播放 | 日韩在线观看免费网站 | 欧美日韩国产精品 | 污污视频在线免费观看 |