2012-08-16 100 views
1

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

假设我有一个表'学生'列id(primary_key),名称和GPA。假设我有一个索引ID和没有其他列

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

仅当查询包含索引列时索引才有效吗?

回答

2

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

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

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

基本上是为发现匹配的行,虽然指数还可以用来帮助整理如果order by包含索引列

+0

thanks @Bohemian,那完全回答了我的问题 – nik7 2012-08-16 05:28:26

1

我想补充一些例子来波希米亚的答案(并假设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. 仅使用字段在索引中,可以从印出完全服务的查询x(即SQL不需要内部“连接”回到表或集群中)。例如下面将完全从IX1服务,因为名称在索引中。

    SELECT name FROM Student WHERE name = 'Bloggs';

  5. 必须有一个很好的指标“选择性”,以便SQL使用索引。例如如果数据库中的EVERYONE具有名称'Bloggs',那么SQL很可能会绕过索引并扫描表。