0

我想知道就数据库系统而言,在哪些情况下最好使用多级索引或任何索引。如果我以以下架构为例:

Course (course_code, course_name, course_leader)
Module (module_code, module_name, module_leader, semester)
Course_module (course_code, module_code)
Lecturer (employee_id, employee_name, email, phone)

可以对行数和访问类型进行假设。我只想知道何时使用主索引而不是多级或二级索引等是正确的。

4

1 回答 1

1

首先稍微澄清一下术语...

主索引只是主键下的索引。二级索引是任何其他索引。所以这与“简单”与“复合”(又名“复合”或您所说的“多级”)索引正交:主索引可能是也可能不是复合索引,二级索引可能是也可能不是复合索引。


要回答你的问题...

取决于您打算运行的数据库结构(PK、FK 和集群)和查询。

例如,数据库结构可能意味着:

  • 上可能会有一个复合索引Course_module {course_code, module_code}来支持它的 PK。
  • 可能会有一个指数Course_module {module_code}来支持 FK。
  • 如果您希望基于 对课程进行聚类(又名“索引组织”) ,则在1course_leader上会有一个聚类索引{course_leader}
  • 等等等等……

查询需求可能意味着:

  • 如果你想找到一个给定的课程course_name,只需要和 index on {course_name}(以获得良好的性能)。
  • 如果你想找到一门给定的课程,course_name并且需要course_leader一个综合索引{course_name, course_leader}
  • 如果您希望获得属于给定的课程,course_leader您需要一个索引{course_leader},但如果您的 SELECT 列表仅包含course_name,您可以考虑使用复合索引覆盖{course_leader, course_name}查询。
  • 等等等等……

每个额外的索引都会降低 INSERT/UPDATE/DELETE 的性能,因此索引设计是读取和写入性能之间的平衡行为。

这一切都源于 B-Tree 的结构以及如何使用它们来满足各种数据库操作。这个主题的完整处理确实超出了任何单个 StackOverflow 答案的范围,但如果您有兴趣,我强烈建议您从头到尾阅读:使用索引,卢克!


1一些 DBMS 根本不支持集群,并且大多数确实需要集群键等于 PK。MS SQL Server 是一个明显的例外 - 您可以将数据聚集在与 PK 不同的键上。

于 2013-05-07T12:24:46.827 回答