在规范化SQL数据库上应用哪些索引?

在规范化SQL数据库上应用哪些索引?,sql,database,key,Sql,Database,Key,我正在规范化我的数据库结构,但我不完全确定应用什么索引。我的结构如下: 我的配置文件表有2列(配置文件id、配置文件名称),我的关键字表有2列(关键字id、关键字名称),我的配置文件关键字表有2列(配置文件id、关键字id) 将索引应用于所有列是否有意义?我应该在profile\u id、keyword\u id上创建主复合键吗?我还应该向profiles\u关键字表添加引用键 不确定哪一个是最好的,哪一个键与另一个不起作用 谢谢 在profiles\u关键字上,您应该添加两个外键,每个表一个

我正在规范化我的数据库结构,但我不完全确定应用什么索引。我的结构如下:

我的配置文件表有2列(配置文件id、配置文件名称),我的关键字表有2列(关键字id、关键字名称),我的配置文件关键字表有2列(配置文件id、关键字id)

将索引应用于所有列是否有意义?我应该在profile\u id、keyword\u id上创建主复合键吗?我还应该向profiles\u关键字表添加引用键

不确定哪一个是最好的,哪一个键与另一个不起作用


谢谢

在profiles\u关键字上,您应该添加两个外键,每个表一个

为每个添加FK的列添加索引是一种很好的做法,因此需要两个索引

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

如果您从“代码>配置文件表或从<代码>关键字< /代码>表中选择名称,您可以在<代码>名称< /代码>列上索引,但您需要考虑字符串字段上的索引占用磁盘的空间。


对于所有索引,请记住,由于DB需要更新索引,因此插入和更新的执行时间由您支付。

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

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

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

键通常通过索引实现——例如,主键需要唯一的索引。我建议对主键和外键应用索引


索引是一种物理事物——它存在于硬盘上。使用索引有两个原因:为键提供物理形状(见上文),以及优化查询。例如,尽管“profile\u name”和“keyword\u name”不是模式中的键,但搜索可能需要它们。因此,您可能需要这些列上的索引

对针对数据运行的查询使用执行计划。它将告诉您何时缺少索引。在PK和FK之外,您需要哪些索引取决于您查询数据的方式。请注意,主键用于使记录唯一,从而使您能够识别它。关于复合主键的决策,请记住这一点。话虽如此,就你所描述的而言,这似乎是一条正确的道路。没有提到数据库引擎,但有没有任何数据库引擎不自动为主键编制索引?@DanBracuk你说得对,我编辑过我的answerPK索引不仅是唯一的,而且是群集的:)不总是-不是每个数据库引擎都支持群集索引。当然,如果您的数据库支持它,那么对主键使用集群唯一索引几乎总是一个好主意。