Database design 何时使用多级索引
我想知道在数据库系统中,在什么情况下最好使用多级索引或任何索引。如果以以下模式为例:Database design 何时使用多级索引,database-design,indexing,schema,Database Design,Indexing,Schema,我想知道在数据库系统中,在什么情况下最好使用多级索引或任何索引。如果以以下模式为例: 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) 可以对行数
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)
可以对行数和访问类型进行假设。我只想知道什么时候使用一级索引而不是多级索引或二级索引是正确的。首先,对术语进行一点澄清 主索引只是主键下的索引。二级索引是任何其他索引。因此,这与“简单”与“复合”(又名“复合”或你所说的“多级”)指数是正交的:主指数可能是复合指数,也可能不是复合指数,次指数可能是复合指数,也可能不是复合指数
要回答你的问题 取决于数据库结构(PKs、FKs和群集)和要运行的查询 例如,数据库结构可能意味着:
- 在
上可能会有一个复合索引,以支持其主键Course\u模块{Course\u code,module\u code}
- 在
上可能会有一个索引来支持FK课程模块{module\u code}
- 如果您希望(也称为“索引组织”)基于
的课程,将在course\u leader
1上有一个聚类索引{course\u leader}
- 等等,等等
- 如果您希望查找具有给定
,则只需要课程名称的课程
上的索引(以获得良好的性能){course\u name}
- 如果您希望查找具有给定
和course\u name
的课程,则需要在course\u leader
上建立一个复合索引{course\u name,course\u leader}
<> LI>如果您希望获得属于给定的代码>课程领导/代码>的课程,您将需要一个索引:<代码> {课程}领导} /代码>,但是如果您的选择列表只包含“代码>课程名称>代码>,您可以考虑使用复合索引<代码> {课程领导,课程名称}//>代码> 。
- 等等,等等
1一些DBMS根本不支持集群,而大多数DBMS确实需要集群密钥来等于PK。MS SQL Server是一个值得注意的例外-您可以将数据聚集在不同于PK的键上。感谢您的回答,它已经基本澄清了这一点,关于复合索引的一点是它们与多级索引不同吗?这是我对多级索引的解释,似乎是复合索引different@user2358161好啊这是一个多级B-树。作为从“外部”访问DBMS的人,您不能直接控制B树需要多少层来存储所有必要的值。同一索引可能在某一时间是单级B-树,而在另一时间是多级B-树。