数据库索引 - 它们应该是什么

时间:2012-09-27 15:34:02

标签: sql database-design optimization

我的大多数数据库表都有一个明确的唯一索引,通过该索引可以在90%的时间内完成查找但我对这一点有点不确定 - 我有一个表来跟踪数据库中项目的用户评级总数,我现在想要添加另一个表,用ip地址列跟踪个人评级,以确保没有人可以评价两次。由于我可以看到这成为一个很大的高使用率表,因此正确优化它非常重要。 (MYSQL表)

此表格包含以下字段:

rating_id(始终 - 唯一),item_id(始终 - 不唯一),user_id(可选 - 不唯一),ip_address(始终 - 不唯一),rating_value(始终 - 不唯一),has_review(bool)

现在我设想90%的查询是这样的:

当用户评价某事时 - 选择item_id = x和ip_address = y,(如果rows = 0)插入评级

在用户帐户页面中 - 选择ip_address = x或username = y

的位置

现在搜索到的字段都不是唯一的,我仍然可以将它们用作索引(例如item _id和ip_address),我可以使用两个索引并且这仍然会提高非索引表的性能吗?

2 个答案:

答案 0 :(得分:6)

您可以拥有唯一或非唯一的索引。 您可以在一个表上拥有多个索引。 您还可以同时在多个字段上建立索引。

通常,如果使用得当,这些将提高查询性能,但这可能会以插入性能为代价。

如果您想显示汇总评级,那么您可以通过定期计算评级结果并在数据库或应用程序中缓存结果来获得更好的性能。

答案 1 :(得分:0)

每个数据库系统都有不同类型的索引。一般来说,他们构建第二个数据结构(如树或哈希映射,但我不知道细节太好,不诚实)来加快查找。

因此,可以通过usernameip-adress为您的表编制索引,以便快速执行这些字段的查询。请记住,修改数据往往很慢,因为索引也必须更新。