我想知道在数据库系统方面哪种情况最好使用多级索引或任何索引。如果我有以下架构作为示例:
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)
可以对行数和访问类型进行假设。我只想知道何时使用主索引而不是多级索引或二级索引等。
答案 0 :(得分:1)
首先是一个轻微的术语澄清......
主索引只是主键下的索引。二级索引是任何其他索引。因此,这与“简单”与“复合”(又称“复合”或所谓的“多级”)索引正交:主索引可能是也可能不是复合索引,辅助索引可能是复合的,也可能不是复合索引。
回答你的问题...
取决于您打算运行的数据库结构(PK,FK和群集)和查询。
例如,数据库结构可能意味着:
Course_module {course_code, module_code}
上可能会有一个综合索引,以支持其PK。Course_module {module_code}
可能会有一个索引支持FK。course_leader
的课程,{course_leader}
1 查询需求可能意味着:
course_name
的课程,则只需要{course_name}
上的索引(以获得良好的效果)。course_name
和course_leader
的课程,则需要{course_name, course_leader}
上的综合索引。course_leader
的课程,则需要{course_leader}
上的索引,但如果您的SELECT列表仅包含course_name
,您可能会考虑{{ 3}}具有复合索引{course_leader, course_name}
的查询。每个附加索引都会降低INSERT / UPDATE / DELETE的性能,因此索引设计是读写性能之间的平衡。
所有这些都源于B树的结构以及它们如何用于满足各种数据库操作。这个主题的完整处理超出了任何单个StackOverflow答案的范围,但如果您有兴趣,我热烈建议从头到尾阅读:covering
1 有些DBMS根本不支持群集,大多数群集确实需要群集密钥等于PK。 MS SQL Server是一个值得注意的例外 - 您可以将数据集中在与PK不同的密钥上。