在SQL中存储标记,类别和int []的最佳方法

时间:2015-09-24 00:23:57

标签: php mysql sql-server optimization database-schema

我正在努力将我的网站上的博客文章放在一起。

我知道如何使用SQL,而且我对不同的类型和长度有所了解,但我对我桌子的最佳长度和类型感到茫然。

我目前的设置方式是:

  • id - BIGINT(20)
  • author_id - BIGINT(20)
  • 标题 - 文字
  • 标签 - VARCHAR(50)
  • 类别 - VARCHAR(50)
  • 项目 - VARCHAR(50)

Tags是帖子的字符串数组,与类别相同。项目将是一系列的整数,即"项目"与帖子相关的。 (每个项目都有自己的页面,当你进入页面时,你可以获得有关它的所有帖子的列表。)

我的问题是,我可以设置此表的最佳方式是什么?

更新

目前,我对存储此优化和优化磁盘使用情况的最佳方式感兴趣。现在我有一个免费的x10hosting服务器我将要使用,它有512mb的限制。如果有必要,我可以稍后支付更大的服务器费用,但是我想坚持使用免费的服务器,直到我达到最大限度。

2 个答案:

答案 0 :(得分:0)

在PHP中,您可以使用一个名为“serialize”的函数,我一直在SQL存储中使用它。

$foo = serialize($bar);

现在只需存储$ foo。 $ bar甚至可以是完整的对象。事实上你可以抓住价值和

$bar = unserialize($foo);

$ bar现在包含您之前想要的任何内容。数组,对象等。这使得sql表的布局变得懒惰,但由于开始和结束结果只是php脚本中的变量,因此表格并不重要。只需将字段 文本 (不是varchar(max))并且你就是肉汁!

php serialize function

答案 1 :(得分:0)

对于严格的空间保护要求:

  • 在客户端压缩标题并存储在BLOB中。
  • 将标记(等)放入commalist中,并使用FIND_IN_SET()检查tags是否包含特定tag。这将很慢,并且不能使用任何索引。
  • 使用MyISAM(2x-3x更小的磁盘空间)。
  • 最小化索引。
  • 使用TINYINT / SMALLINT / MEDIUMINT代替INT或BIGINT。
  • 使用UNSIGNED
  • 如果您不需要utf8,请使用latin1;在任何不需要utf8的东西(例如邮政编码)上使用latin1。
  • 0.5GB是微不足道的;检查其他服务。