2010-07-13 53 views
2

我正在开发一项工作服务,它具有径向搜索,全文搜索,全文搜索功能+禁用某些工作列表的功能(如取消选中文本框和不选中更长时间返回全职工作​​)。狮身人面像问题:构建数据库

正在开发Sphinx的开发人员希望数据库信息全部以键的形式存储为整数(所以在表格下可以存储“作业类型”值,例如1 =“part-time”和2 =“全职“)...而其他开发人员希望将数据库保留为字符串(因此在”作业类型“表格下,它表示”兼职“或”全职“)。

是否有原因保持数据库作为整数?还是应该字符串被罚款?

谢谢!

沃克

回答

3

选择密钥可能会对性能产生巨大影响。尽可能使用ints而不是字符串。这被称为使用“代理键”,其中键提供了一种独特而快速的方式来查找数据,而不是站在它自己的数据。

字符串比较是资源密集型的,可能比比较数字要差几个数量级。

您可以将您的用户界面关闭代理键,但显示另一列(如job_type)。通过这种方式,当您访问数据库时,将传入int,并避免查看表以查找具有匹配字符串的行。

当涉及到数据库中的表的联接时,如果您将int或另一个数字作为主键,它们将运行更多

编辑:在你提到的具体情况下,如果你只有两个选择你的领域可能是什么,而且不太可能改变,你可能想要看看像是一个位域,你可以命名它IsFullTime。一个位或布尔值字段包含1或0,并且不包含其他内容,通常与另一个字段无关。

+0

所以你建议我们在同一行中有一个int键和等价的字符串(兼职等)? – Walker 2010-07-13 20:33:14

+0

是的,所以无论何时查看JobTypes表,您都会看到如下所示的行:(ID = 1,Name =“part-time”)并且在您的Jobs表中(我正在假设您是什么在这里做的),你可能有这样的事情:(Id = 324,CompanyId = 32,JobTypeId = 1,Name =“Intern”),你可能想要查看比特字段或类似于JobType的特定实例,注意我正在更新我的答案以反映这一点。抱歉格式 – Dlongnecker 2010-07-13 20:48:23

1

如果你正在规范你的结构(我希望你是),那么数字键将是最有效的。

1

除了使用整数主键的常见原因之外,使用带有Sphinx的整数是非常重要的,因为成功的Sphinx搜索返回的结果集是与匹配项关联的文档ID列表。这些ID然后用于从数据库中提取相关数据。 Sphinx不直接从数据库返回行。

欲了解更多详情,请参阅Sphinx manual,特别是3.5. Restrictions on the source data

+0

感谢迈克,我不知道 - 我很欣赏这种见解。 – Walker 2010-07-13 22:15:10