我有一个总是存储5位数值的列(例如:10100,60200,30100等)。我对使用哪种数据类型(char(5)或varchar(5)或smallInt)感到困惑。据我所知,smallint只占用2个字节,char(5)和varchar(5)需要多少字节?在性能和存储方面,哪种数据类型对我的方案更好?
答案 0 :(得分:1)
2个字节的数据= 0到65,535(如果未签名)或从-32,768到32,767(如果签名)的数字。 (无符号=非负值,有罪=负到负的范围)。
http://dev.mysql.com/doc/refman/4.1/en/integer-types.html
使用中等int(0到16,777,215无符号,-8,388,608到8,388,607签名)将保证任何5位数的接受值,这是我建议使用的,因为它只需要3个字节的数据而varchar / char为5个。如果您必须使用字符,并且您知道字符数不超过5个或少于5个字符,则最好使用char
而不是varchar
。
答案 1 :(得分:0)
首先,它取决于5位数代码的类型。如果其编号大于选择mediumint
,则如果字符串选择char
,则可以轻松操作以供将来操作。还要考虑表的大小
答案 2 :(得分:0)
没有人谈论'存储在磁盘上'并且要求计算机从磁盘中检索文件是......好吧,磁盘运行速度为每秒100个字节 - CPU运行在数十亿每秒的操作次数......这个负载(要求计算机获得记录)类似于要求你的胖乎乎的伙伴跑到当地商店寻找一些便宜的食物[一个Slurpee]。
“是的,好的,我会在一段时间后回来 - 直到我回来才做任何事情。”
没有人提到varchar是一个int,charstring。所以varchar(3)是7个字节而不是3个。
好的,我只会有5000个条目。
我将有126亿美元。
是的但是磁盘空间很便宜 - 但是当要求磁盘存储或返回数据时却没有。磁盘写/读通常是2k或4k块。我玩过的第一条规则(在游戏学校)就是如果你的桌子接近10列,你需要停下来重新思考你的设计。
真实故事 - 客户表:
id, fname, lname, sex, dob, address X5(street,city,zip,country), phone X5(with notes), comments and a couple of others.
大小:2488字节。
需要2个磁盘提取才能返回记录 - 请一次获得2个Slurpees,1个。
同时在数据库中搜索INT比搜索CHAR要快得多,它甚至都不好笑。 IE将电话号码存储为例如varchar(48)并在输入数字时进行搜索:(719)123-4567或7191234567或719.123.4567或'719 1234567 sisters phone'。有人请给我一个很好的询问。 INTs,ENums等。
如果您的表说100字节长,而您的计算机使用4k记录,则每个slurpee可以获得40个客户,而不是80%的客户。这是一个'关系'数据库。这意味着cust.name表与cust.phone,cust.address和cust.comments有关系。
嘟嘟嘟嘟......