1

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

该表将包含以下字段:

rating_id(总是 - 唯一),item_id(总是 - 非唯一),user_id(可选 - 非唯一),ip_address(总是 - 非唯一),rating_value(总是 - 非唯一),has_review(布尔)

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

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

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

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

4

2 回答 2

6

您可以拥有唯一或不唯一的索引。一个表上可以有多个索引。您还可以一次在多个字段上创建索引。

一般来说,如果使用得当,这些将提高查询性能,尽管这可能会以插入性能为代价。

如果要显示聚合评分,则可以通过定期计算评分结果并将结果缓存在数据库或应用程序中来获得更好的性能。

于 2012-09-27T15:36:22.010 回答
0

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

因此,通过索引您的表可能是有意义的usernameip-adress以便非常快速地使用这些字段执行查询。请记住,修改数据往往很慢,因为索引也必须更新。

于 2012-09-27T15:40:04.640 回答