我们做的一个项目,把建表的sql语句发给DBA审核,DBA提出了几个意见,其中一条是不建议使用tinyint字段,那个字段type的值可能是1或者2,所以我们用tinyint,以前都是这样用啊。
为什么DBA不推荐使用tinyint呢?
业精于勤,荒于嬉;行成于思,毁于随。
各有各的想法,我比較建議用tinyint,它只佔用一個字節,使用enum不靈活,比如定義了1是男,2是女,如果我想顯示1是男人, 2是女人,就不方便了。
tinyint
enum
而在MYSQL上,是不建議用NULL,NULL是佔用四個字符,記錄多了,這個是不必要的損耗,查詢的時候,where field is null 或者field is not null,這樣的查詢,效率也不是很高的,把字段設為default '',這樣可以where field = '' or field != '',或者直接不允許為空NOT NULL。
NULL
where field is null
field is not null
default ''
where field = '' or field != ''
NOT NULL
半吊子DBA唄,可能不知道從哪本書上看來的東西,我們公司DBA還不允許字段為NULL呢,更奇葩的都有。
這和當初C語言程式設計不允許用goto一樣,半吊子「專家」
type 用 1,2 本身就不是好的設計。時間一久,總是需要翻閱程式碼才知道意義。使用 enum 類型,並給每個類型一個合適的名字會好很多。
type
但是如果這個欄位需要關聯查詢,那麼不建議使用,效能會有比較嚴重的衰減。
說java連mysql的時候,不認識tinyint,只辨識0和1
用tinyint挺合理的。別聽DBA瞎說。
各有各的想法,我比較建議用
tinyint
,它只佔用一個字節,使用enum
不靈活,比如定義了1是男,2是女,如果我想顯示1是男人, 2是女人,就不方便了。而在MYSQL上,是不建議用
NULL
,NULL
是佔用四個字符,記錄多了,這個是不必要的損耗,查詢的時候,where field is null
或者field is not null
,這樣的查詢,效率也不是很高的,把字段設為default ''
,這樣可以where field = '' or field != ''
,或者直接不允許為空NOT NULL
。半吊子DBA唄,可能不知道從哪本書上看來的東西,我們公司DBA還不允許字段為NULL呢,更奇葩的都有。
這和當初C語言程式設計不允許用goto一樣,半吊子「專家」
type
用 1,2 本身就不是好的設計。時間一久,總是需要翻閱程式碼才知道意義。使用enum
類型,並給每個類型一個合適的名字會好很多。但是如果這個欄位需要關聯查詢,那麼不建議使用,效能會有比較嚴重的衰減。
說java連mysql的時候,不認識tinyint,只辨識0和1
用tinyint挺合理的。別聽DBA瞎說。