本人对索引一直不理解,也在网上搜索相关资料,看到如下一段文字:
假设我们创建了一个名为people的表:
CREATE TABLE people ( peopleid SMALLINT NOT NULL, name CHAR(50) NOT NULL ); 
然后,我们完全随机把1000个不同name值插入到people表。我们可知,在数据文件中name列没有任何明确的次序。如果我们创建了name列的索引,我们要查找name等于“Mike”记录的peopleid(SQL命令为“SELECT peopleid FROM people WHERE name=\'Mike\';”),数据库系统能够在name的索引中查找“Mike”值,然后直接转到数据文件中相应的行,准确地返回该行的peopleid(999)。在这个过程中,数据库系统只需处理一个行就可以返回结果。如果没有“name”列的索引,就要扫描数据文件中的所有记录,即1000个记录!上面说到:“如果没有“name”列的索引,数据库系统要扫描数据文件中的所有记录,即1000个记录!” 问题:如果在name列建立了索引,那当你在name列索引中查找“Mike”时,不也是在name列索引中的1000个记录中找“mike”?这样一来不都是在1000个记录中查找"mike"? 
希望有人能帮我解惑,让我对索引有个比较正确的认识。本人是初学者,所以回复时希望能通俗易懂,举例说明。

解决方案 »

  1.   


    "而是查找索引表",我的问题是,你在索引表中查找mike时,那索引表本身中不也是有1000个项的,不也是在1000条中找一个值。 不知道我这句本身说的对还是错?
      

  2.   

    普通索引的结构是树,不需要遍历。通常只需要3步:->root -> middle ->leaf 就找到你想要的记录.
    普通表的结构是堆,必须遍历才能找到想要的记录.
      

  3.   


    索引的结构就像数据结构中的二叉树,不需查找每个结点,索引的结点中保存了相应的列值和ROWID,例如你找mike,会先找到
    mike结点,然后根据ROWID就可以直接定位到行!
      

  4.   

    谢谢前辈们的热心帮助,现在对索引有了进一步的正确的认识,至少知道索引的结构是怎样的了。接下来我想我应该去了解树、结点、叶子,这样才会对索引有全面的认识,再次表示感谢——HelloWorld_001,TodayZ,zhpsam109。