1

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

假设我有一个表 'Student' 列 id(primary_key)、name 和 GPA。假设我在 id 和其他列上没有索引

现在,如果我使用名称和 GPA(不使用 id)查询记录,它必须搜索所有记录以查找匹配项。索引在这里有什么好处?

索引是否仅在查询包含索引列时才有效?

4

2 回答 2

3

如果我使用名称和 GPA(不带 id)查询记录,它必须搜索所有记录以查找匹配项。索引在这里有什么好处?

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

索引是否仅在查询包含索引列时才有效?

基本上可以用于查找order by匹配的行,尽管如果包含索引列,索引也可用于帮助排序

于 2012-08-16T05:06:12.037 回答
1

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

  1. Student(name) 上的索引 IX1 将有利于以下查询:

    SELECT * FROM Student WHERE name = 'Bloggs';

  2. 同样,您需要一个索引,例如 Student(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 很可能会绕过索引并改为扫描表。

于 2012-08-16T05:24:55.487 回答