2010-01-07 159 views
5

最近,我一直在考慮是否值得擁有1個可能有很多NULL列的表,或者如果最好有更多的表沒有NULL。我聽說InnoDB上沒有存儲NULL,所以我想知道是否有任何缺點或有大量空值的行的問題。我一直聽說普通的NULL是壞的,但我從來沒有真正明白爲什麼。順便說一下,如果這些問題很重要的話,那些在外鍵上就是NULL。NULL對MySQL表有什麼影響? (InnoDB)

第二個疑問是,當我在有很多NULL的列上使用INNER JOIN時,是否有任何性能問題?就像,如果我有4個外鍵,而且我要做4個INNER JOIN,但很可能只有其中的1個不是NULL,這是否會影響性能?由於

回答

6

參見:

空值進行索引。

在InnoDB中,您可以通過使用NULL來減少數據行的存儲需求。

+0

嗨比爾,謝謝你的回答。我想知道更多INNER JOIN對具有很多NULL的列的性能影響。這不好嗎? – Clash 2010-01-09 13:19:16

+1

我不能引用任何定量測量,但我相信任何性能差異都可以忽略不計。你一定會把注意力集中在性能改進上,以便更好地實現降壓,比如使用'EXPLAIN'和智能緩存。 – 2010-01-09 15:47:32

2

在書中高性能的MySQL:優化,備份,複製,以及更多男爵施瓦茨,彼得·扎伊採夫,瓦迪姆特卡琴科,傑里米·薩沃德尼,羅倫茨,和Derek J.成球,它說表列允許空值使MySQL更難以優化引用空列的查詢。當一個可空列被索引時,它需要爲每個條目添加一個額外的字節,並且可能會導致在MyISAM中將固定大小的索引(例如單個整數列上的索引)轉換爲可變大小的索引。他們說什麼時候列需要傳遞一個缺失的值,用整數0代替一個特殊字符或一個空字符串。儘可能避免使用NULL和NOT NULL。

+0

與mysql官方文檔相同。 http://dev.mysql.com/doc/refman/5.5/en/data-size.html – navy 2016-03-31 11:31:10

相關問題