关于数据库索引如何工作的简单问题。
假设我有一个表'Student',其中包含列id(primary_key),名称和GPA。假设我有一个id而不是其他列的索引
现在,如果我使用名称和GPA(不带id)查询记录,则必须搜索所有记录以进行匹配。这里索引的优势是什么?
仅当查询包含索引列时,索引是否有效?
答案 0 :(得分:2)
如果我使用名称和GPA(不带id)查询记录,则必须搜索所有记录以进行匹配。这里索引的优势是什么?
你是对的。除了唯一索引也可以强制实现唯一性之外没有任何优势
仅当查询包含索引列时,索引是否有效?
基本上是查找匹配行,但是如果order by
包含索引列
答案 1 :(得分:1)
只是为Bohemian的答案添加一些例子(并假设一个SQL RDBMS):
学生(姓名)上的索引IX1将受益于以下查询:
SELECT * FROM Student WHERE name = 'Bloggs';
同样,您需要一个索引,例如学生(GPA)上的IX2
SELECT * FROM Student WHERE GPA between 1 and 2;
如果您同时拥有上述索引IX1和IX2,则SQL将在以下查询之间“选择”:
SELECT * FROM Student WHERE name = 'Bloggs' and GPA between 1 and 2;
只能使用索引中的字段的查询可以完全从索引中获得服务(即,不需要SQL在内部“加入”回到表或集群中)。例如以下内容将完全由IX1提供服务,因为名称在索引中。
SELECT name FROM Student WHERE name = 'Bloggs';
索引中必须有良好的“选择性”才能使SQL使用索引。例如如果数据库中的每个人都有一个名称'Bloggs',那么SQL很可能会绕过索引并扫描表格。