数据库索引示例

时间:2012-08-16 05:02:51

标签: database indexing database-indexes

关于数据库索引如何工作的简单问题。

假设我有一个表'Student',其中包含列id(primary_key),名称和GPA。假设我有一个id而不是其他列的索引

现在,如果我使用名称和GPA(不带id)查询记录,则必须搜索所有记录以进行匹配。这里索引的优势是什么?

仅当查询包含索引列时,索引是否有效?

2 个答案:

答案 0 :(得分:2)

  

如果我使用名称和GPA(不带id)查询记录,则必须搜索所有记录以进行匹配。这里索引的优势是什么?

你是对的。除了唯一索引也可以强制实现唯一性之外没有任何优势

  

仅当查询包含索引列时,索引是否有效?

基本上是查找匹配行,但是如果order by包含索引列

,索引也可用于帮助排序

答案 1 :(得分:1)

只是为Bohemian的答案添加一些例子(并假设一个SQL RDBMS):

  1. 学生(姓名)上的索引IX1将受益于以下查询:

    SELECT * FROM Student WHERE name = 'Bloggs';

  2. 同样,您需要一个索引,例如学生(GPA)上的IX2

    SELECT * FROM Student WHERE GPA between 1 and 2;

  3. 如果您同时拥有上述索引IX1和IX2,则SQL将在以下查询之间“选择”:

    SELECT * FROM Student WHERE name = 'Bloggs' and GPA between 1 and 2;

  4. 只能使用索引中的字段的查询可以完全从索引中获得服务(即,不需要SQL在内部“加入”回到表或集群中)。例如以下内容将完全由IX1提供服务,因为名称在索引中。

    SELECT name FROM Student WHERE name = 'Bloggs';

  5. 索引中必须有良好的“选择性”才能使SQL使用索引。例如如果数据库中的每个人都有一个名称'Bloggs',那么SQL很可能会绕过索引并扫描表格。