索引有3中分别为primary index , secondary index 和 cluster index。如何构建这些索引如之前所说一般是用hash,b-tree,或者ISAM(indexed sequential access method),之前hash和b-tree之间的区别已经说过一个是支持equality selection,一个支持range selection。那么ISAM也支持range selection。ISAM的具体形式如下所示:
这里有个问题就是postgresql到底是用b-tree还是b+tree,这个真的不知道,没有看过代码,icarnegie上教材是说了b+树的特性会更加好,因为b+所有的数据存储在叶节点上,这样搜索的时间稳定,而且能索引的数据量相对会比b-tree大。但是后面postgre在建立索引的时候却用的名字是"btree",也没看过mysql的源码,所以不知道具体是什么我这里就当它是btree。
然后这3种索引的用处分别是:先考虑一个学生table 包括 student_id score name
primary index: 是建立在数据库record的主键上,而且数据是依据这个主键排序成的。如建立在student_id上的index。
cluster index :是建立在数据库某个filed排序而成,这个filed可以在不同的record里面重复出现。 如建立在score的index。
secondary index:是建立在某个filed,数据不需要这个filed排序,也不需要这个filed满足unique。如建立在name上index。
有了这3种index就可以考虑postgre的简单数据库优化问题了。