关于数据库索引如何工作的一个简单问题。数据库索引示例
假设我有一个表'学生'列id(primary_key),名称和GPA。假设我有一个索引ID和没有其他列
现在,如果我查询使用名称和GPA(不ID)的记录,它必须搜索匹配的所有记录。这里的索引有什么优势?
仅当查询包含索引列时索引才有效吗?
关于数据库索引如何工作的一个简单问题。数据库索引示例
假设我有一个表'学生'列id(primary_key),名称和GPA。假设我有一个索引ID和没有其他列
现在,如果我查询使用名称和GPA(不ID)的记录,它必须搜索匹配的所有记录。这里的索引有什么优势?
仅当查询包含索引列时索引才有效吗?
如果我使用名称和GPA(不带id)查询记录,它必须搜索所有记录以进行匹配。这里的索引有什么优势?
你是对的。除了唯一索引也可以强制唯一性外,没有任何优势。
仅当查询包含索引列时,索引是否有效?
基本上是为发现匹配的行,虽然指数还可以用来帮助整理如果order by
包含索引列
我想补充一些例子来波希米亚的答案(并假设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;
仅使用字段在索引中,可以从印出完全服务的查询x(即SQL不需要内部“连接”回到表或集群中)。例如下面将完全从IX1服务,因为名称在索引中。
SELECT name FROM Student WHERE name = 'Bloggs';
必须有一个很好的指标“选择性”,以便SQL使用索引。例如如果数据库中的EVERYONE具有名称'Bloggs',那么SQL很可能会绕过索引并扫描表。
thanks @Bohemian,那完全回答了我的问题 – nik7 2012-08-16 05:28:26