见识到一个java项目,mysql数据库,所有表的主键都是varchar(64)
ringa_lee
varchar相對於int來說佔用磁碟空間多,磁碟io也會多,然後記憶體頻寬也會多。這一點上尤其在innodb更為明顯,innodb表的Secondary index的 leaf page中都要保存primary key的值,主鍵如果是varchar,會導致secondary index的體積會比較大。而且varchar主鍵在比較上也會慢一些,插入時容易發送資料的非順序插入,導致碎片,index tree效率比int低
這是偷懶的表現!
很浪費,且不專業的表現。
如果是char()型,如值給的是5。那麼不管該欄位內是否有值,就算null也將佔用5×当前数据库编码字节。 varchar()則會先用一個位元組記錄該型別最大範圍,如不傳值也就記錄首字節而已,傳至則儲存值最大範圍內的內容。
null
5×当前数据库编码字节
其餘的欄位其每筆記錄佔用硬碟體積另說。
樓上說的都很對可能他記錄的內容是UUID 很多jsp程式設計庫的時候都這樣,不知道為什麼
varchar相對於int來說佔用磁碟空間多,磁碟io也會多,然後記憶體頻寬也會多。這一點上尤其在innodb更為明顯,innodb表的Secondary index的 leaf page中都要保存primary key的值,主鍵如果是varchar,會導致secondary index的體積會比較大。而且varchar主鍵在比較上也會慢一些,插入時容易發送資料的非順序插入,導致碎片,index tree效率比int低
這是偷懶的表現!
很浪費,且不專業的表現。
如果是char()型,如值給的是5。那麼不管該欄位內是否有值,就算
null
也將佔用5×当前数据库编码字节
。 varchar()則會先用一個位元組記錄該型別最大範圍,如不傳值也就記錄首字節而已,傳至則儲存值最大範圍內的內容。其餘的欄位其每筆記錄佔用硬碟體積另說。
樓上說的都很對
可能他記錄的內容是UUID
很多jsp程式設計庫的時候都這樣,不知道為什麼