MySql Tinytext vs Varchar vs Char

2022-08-30 15:20:57

建立一个有可能被点击量和流量狠狠打击的系统。这是一个典型的Apache / PHP / MySql设置。

以前构建过很多系统,但从来没有遇到过我真的必须就这种规模的潜在可扩展性做出决定的情况。关于构建这种宏观系统,我有几十个问题,但对于这个特定的问题,我试图决定使用什么作为数据类型。

以下是100英尺的视图:

我们有一个表,其中(除其他事项外)有一个描述字段。我们决定将其限制为 255 个字符它将是可搜索的即:向我显示所有包含...的描述的条目)。问题:这个表在某些时候可能有数百万个条目或者我们认为是这样)。

我还没有弄清楚搜索的策略(MySql LIKE运算符可能会很慢和/或我猜想这么大的#记录),但这是另一个SO问题。对于这个问题,我想知道将此字段创建为小文本,varchar和char的利弊是什么

我不是数据库专家,所以任何和所有的评论都是有帮助的。谢谢 -


答案 1

使用 .CHAR

BLOB的 和 存储在行的外部,因此读取它们会受到访问惩罚。的长度是可变的,这样可以节省存储空间,这可能会带来很小的访问损失(因为行的长度并不都是固定的)。TEXTVARCHAR

但是,如果正确创建索引,则可以将或可以完全存储在索引中,这将使访问速度更快。VARCHARCHAR

参见: varchar(255) v tinyblob v tinytext
And: http://213.136.52.31/mysql/540
And: http://forums.mysql.com/read.php?10,254231,254231#msg-254231
And: http://forums.mysql.com/read.php?20,223006,223683#msg-223683

顺便说一句,根据我的经验,MySQL正则表达式运算符比简单查询(即)快得多,并且显然更通用。LIKESELECT ID WHERE SOME_COLUMN REGEX 'search.*'


答案 2

我相信使用varchar,您可以在较低级别的实际数据库中存储一个可变长度,这意味着它可以占用更少的磁盘空间,即使一行不使用所有内容,文本字段的长度也是固定的。固定长度的字符串应该可以更快地查询。

编辑:我刚刚查了一下,文本类型也存储为可变长度。最好的办法是用mysqlslap之类的东西来衡量它。

关于你的另一个未提出的问题,你可能想要构建某种搜索索引,将描述字段中的每个有用单词单独链接到描述,然后你可以索引它并搜索它。将比使用 %like% 快得多。


推荐