要应用于规范化 SQL 数据库的索引



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

"我的个人资料"表格有 2 列(profile_id、profile_name),关键字表格有 2 列(keyword_id、keyword_name),我的profiles_keyword表格有 2 列(profile_id、keyword_id)。

将索引应用于所有列是否有意义?我应该在profile_id,keyword_id上制作主组合键吗?我还应该将引用键添加到profiles_keyword表中?

不确定哪个是最好的,哪个键不适用于另一个!

谢谢。

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

首先,有密钥的概念 - 主要和外国。这些是概念实体,用于标识表的性质及其关系。例如,主键表示"这是您在此表中唯一标识一行和另一行的方式"。原则上,"钥匙"本身没有物理存在。

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

索引是一个物理的东西 - 它存在于你的硬盘驱动器上。使用索引有两个原因:为键提供物理形状(见上文)和优化查询。例如,即使"profile_name"和"keyword_name"不是架构中的键,搜索也可能需要它们。因此,您可能需要这些列上的索引。

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

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

最好

为添加 FK 的每个列添加索引,因此需要 2 个索引。

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

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

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

最新更新