為什麼Mysql 資料庫盡量避免NULL?

2021-10-23 09:01:57 字數 585 閱讀 2671

在mysql中很多表都包含可為null(空值)的列,即使應用程式並不需要儲存null也是如此,這是因為可為null是列的預設屬性。但我們常在一些mysql效能優化的書或者一些部落格中看到觀點:在資料列中,盡量不要用null 值,使用0,-1或者其他特殊標識替換null值,除非真的需要儲存null值,那到底是為什麼?如果替換了會有什麼好處?同時又有什麼問題呢?那麼就看下面:

通常把可為null的列改為not null 帶來的效能提公升比較小,所以(調優時)沒有必要首先在現有schema中查詢並修改掉這種情況,除非確定這會導致問題。但是,如果計畫在列上建索引,就應該盡量避免設計成可為null的列。

當確實需要標識未知值時也不要害怕使用null。在一些場景中,使用null可能會比某個神奇常數更好。從特定型別的值域中選擇乙個不可能的值,例如用-1代表乙個未知數,可能導致**複雜的多,並容易引入bug,還可能讓事情變得一團糟(注:mysql會在索引中儲存null值,oracle不會)。

當然也有例外,innodb使用單獨的位(bit)來儲存null值,所以對於稀疏資料(很多值位null,只有少數行的列有非null值)由很好的空間效率,這一點不適用於myisam。

為什麼要選擇MySQL資料庫

什麼是mysql?mysql是乙個多使用者 多執行緒的sql資料庫,是乙個客戶機 伺服器結構的應用,它由乙個伺服器守護程式mysqld和很多不同的客戶程式和庫組成。sql structured query language結構化查詢語言 是目前使用最廣的並且是標準的資料庫語言。sql語言使得訪問或更...

C語言再學習4 迴圈 為什麼盡量避免遞迴

for int i 0 i 5 i 如果變數i小於5,就一直執行,每次執行一次然後變數i自己加1 乙個for迴圈就這麼簡單,可是為什麼i能控制這個迴圈的次數?我們應該反過來學習 for int i 0 i 5 i 這是乙個空的for迴圈,讓我們來看看 mov dword ptr ebp 8 0 這行...

為什麼使用資料庫

儘管檔案系統可以解決不少問題,有些問題是檔案系統所無法 解決的,如果給檔案系統加上這些特性,那麼檔案系統也就成 為了乙個資料庫。1.資料的冗餘與資料不一致 重複資料多,而且對於分布式,有可能出現 資料無法同步的問題。2.資料訪問困難,資料孤立 因為資料儲存沒有採取同樣的格式,使得使 用統一的介面訪問...