我正在为我的网站上的博客文章整理表格。
我知道如何使用SQL,我知道一些关于不同的类型和长度,但是我不知道我的表的最佳长度和类型。
我目前设置的方式是:
- id - BIGINT (20)
- author_id - BIGINT (20)
- title - text
- tags - VARCHAR (50)
- 分类- VARCHAR (50)
- projects - VARCHAR (50)
Tags是文章标签的字符串数组,类别也是如此。Projects将是一个整数数组,它们是与该帖子关联的"项目"的id。(每个项目都有自己的页面,当你进入这个页面时,你可以得到一个关于它的所有帖子的列表)。
我的问题是,我可以设置这个表的最优化的方式是什么?
更新:
目前我感兴趣的是最好的方式来存储和优化磁盘使用。现在我有一个免费的x10hosting服务器,我将使用它,它有512mb的限制。如果有必要的话,我可以稍后购买一个更大的服务器,但我想坚持使用免费的服务器,直到我的极限。
对于严格的空间节约要求:
- 在客户端压缩标题并存储在BLOB中。
- 将标签(等)放在逗号中,并使用
FIND_IN_SET()
来检查tags
是否包含特定的tag
。这将是缓慢的,并且不能使用任何索引。 - 使用MyISAM(磁盘占用空间小2 -3倍)
- 减少索引。
- 使用TINYINT/SMALLINT/MEDIUMINT代替INT或BIGINT。 使用无符号
- 使用latin1如果你不需要utf8;在任何不需要utf8的地方(例如zipcode)使用latin1。
- 0.5GB微不足道;检查其他服务
在PHP中,您可以使用一个名为"serialize"的函数,我一直在SQL存储中使用该函数。
$foo = serialize($bar);
现在只存储$foo。$bar甚至可以是完整的对象。之后你可以直接获取值和
$bar = unserialize($foo);
$bar现在包含了之前想要的内容。数组、对象等。这使得您的sql表的布局懒惰,但由于开始和结束的结果只是一个php脚本中的变量,表真的不重要。只要让字段text(不是varchar(max)),你就很轻松了!
php序列化函数