0

我正在规范我的数据库结构,但我不完全确定要应用哪些索引。我有以下结构:

我的 Profiles 表有 2 列(profile_id、profile_name),我的关键字表有 2 列(keyword_id、keyword_name),我的profiles_keyword 表有 2 列(profile_id、keyword_id)。

将索引应用于所有列是否有意义?我应该在 profile_id,keyword_id 上创建一个 PRIMARY COMPOSITE 键吗?我还应该在profiles_keyword 表中添加参考键吗?

不确定哪个最好,哪个键不能与另一个键一起使用!

谢谢。

4

3 回答 3

1

这里有两个相关但在概念上独立的概念。

首先,有键的概念——主键和外键。这些是概念实体,用于识别表的性质及其关系。例如,主键表示“这是您在此表中唯一标识一行与另一行的方式”。原则上,“钥匙”本身并不具有物理存在。

键通常使用索引来实现——例如,主键需要唯一索引。我建议您将索引应用于主键和外键。

索引是物理的东西——它存在于你的硬盘上。您使用索引有两个原因:为您的键赋予物理形状(见上文),以及优化查询。例如,即使“profile_name”和“keyword_name”不是架构中的键,也可能需要它们进行搜索。因此,您可能需要在这些列上建立索引。

于 2013-10-06T13:07:40.140 回答
0

因为它们是主键,所以 profile_id 和 keyword_id 都会自动索引,以优化连接。您只需要关系表上的复合主键来确保对的唯一性,如果这不是约束,即相同的配置文件可以使用相同的关键字关联更多次,则不需要该索引。但是,您可以只创建一个非唯一索引来优化连接性能。无论如何,最好指定外键来正确管理实体完整性之间的关系。

于 2013-10-06T12:57:08.217 回答
0

在profiles_keyword 上,您应该添加2 个外键,每个表一个。

为添加 FK 的每一列添加索引是一个很好的做法,因此那里需要 2 个索引。

根据您的查询,您应该决定是否同时为 2 列添加索引。

如果您确实从Profiles表中或从keyword表中按名称进行选择,则可以对Name列进行索引,但您需要考虑字符串字段上的索引在磁盘上占用更多空间。

对于所有索引,请记住您需要为插入和更新支付执行时间,因为数据库需要更新索引。

于 2013-10-06T12:53:10.510 回答