我正在规范我的数据库结构,但我不完全确定要应用哪些索引。我有以下结构:
我的个人资料表有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表中添加引用键吗?
不确定哪个是最好的,哪个键与另一个一起工作!
感谢。
答案 0 :(得分:1)
这里有两个相关但概念上独立的概念。
首先,有钥匙的概念 - 主要和外国。这些是概念实体,用于识别表格的性质及其关系。例如,主键表示“这是您在此表中唯一标识另一行的方式”。原则上,“钥匙”本身没有物理存在。
密钥通常使用索引实现 - 例如,主键需要唯一索引。我建议您将索引应用于主键和外键。
索引是物理的东西 - 它存在于您的硬盘上。您使用索引有两个原因:为您的键提供物理形状(见上文),以及优化查询。例如,即使“profile_name”和“keyword_name”不是架构中的键,也可能需要它们进行搜索。因此,您可能需要这些列的索引。
答案 1 :(得分:0)
在profiles_keyword上你应该添加2个外键,每个表一个。
最好为添加FK的每个列添加索引,因此需要2个索引。
根据您的查询,您应该决定是否同时添加2列的索引。
如果您从Profiles
表或keyword
表中选择了名称,您可以在Name
列上进行索引,但是您需要考虑字符串字段上的索引在磁盘上占用更多空间。
对于所有索引,请记住您在插入和更新时支付执行时间,因为数据库需要更新索引。
答案 2 :(得分:0)
由于它们是主键,因此profile_id和keyword_id都会自动编入索引,以便优化连接。您只需要关系表上的复合主键以确保对的唯一性,如果这不是约束,即相同的配置文件可以与相同的关键字相关更多次,则不需要该索引。但是,您可以创建非唯一索引来优化连接性能。无论如何都可以很好地指定外键来正确管理实体之间的关系完整性。