有很长时间没有更新博客了,再过几天都2月分了,如果再不更新一篇,我1月分都没有更新,保持连续,今天更新一篇。
最近没有什么看技术方面的东西,游戏,画画搞这些去了。我发现我每年一到年底就是搞这些东西,其实平时技术也搞得少。昨天看了一篇园友博客写的为什么要在自增列,时间上面建聚集索引,我今天更新一篇关于索引的东西。我翻出以前讲关于索引和创建索引的ppt复习一篇,下面就是关于索引的内容。
1.先从字面,定义来理解一下索引。百度百科是这样来说的“将文献中具有检索意义的事项(可以是人名、地名、词语、概念、或其他事项)按照一定方式有序编排起来,以供检索的工具书”,从这一点可以看出索引是将一些关键的名词,项按一定的方式排起来,以供检索的工具,他不是内容,只是工具书。其实这些定义完全符合数据库中所说的索引。我目前在网上也没有找到对数据库中索引的定义,其实用上面的定义已经能解释数据库中的索引了。a.她不是内容,而是工具;b.她是将一些特殊的列(项)排一定的方式排起来的东西(后面会说到,这个东西就是B树);c.她是用来支持检索的;
2.B树,说索引不能不说一下B树,B树是平衡树Balanced Tree.也就是叶子节点分布大致匀称(平衡)的树。有一种定义说的是:没有一个叶子节点到根节点的距离远得多的树。上面所说的东西,就是B树,可以说索引就是B树(当然说的是数据库中的索引,你说目录也是索引,但是他不是索,他可以是一个序列)。B树的查找很快,比如你想像一棵平衡二叉树,从根节点查找下来,一次就分成两部分,走一个分支,这样锁定目标就很快,当然数据库里面的B树不是二叉,是N叉,他的一个节点是一个页,所以这个数据层次不会很高,取数据也是一页一页的取数。我们了解一B树查找快以后,就知道为什么索引要组织成B树的结构了。
3.上面了解了索引,B树,当然到目前可能还不是很清析,我们现在再来看看数据库表的结构。在MSSQL中表只有两种结构HOBT,这个HOBT是 Heep Or BTree,就是堆和B树的结构。现在我们接触到两个地方有B树了。一个是索引是B树,现在表也可能是B树。堆组织结构就没有B树复杂了,就是一块一块的空间。
4.上面几个清楚了以后,现在来看几者的关系了。主要是说索引。索引是本文的核心。可能有人对上面的HOBT还有一点困惑,现在我们就来说明HOBT,哪些表是H,哪些表是BT呢?有聚集索引的表就是BT,无聚集索引的表就是H结构。通过聚集索引一下就把表的组织结构分成了两种。聚集索引是什么?聚集索引肯定是索引,所以她是一种特殊的索引,她的叶子节点就是数据项,不是数据项的复本。那普通的索引的叶子节点是数据项的复本。这两种索引的区别就在于叶子节点,聚集索引的叶子节点叫聚集键,由项和唯一标识组成(这个是由于项有重复的情况才会用到),非聚集索引的叶子节点叫书签,由文件号,而号,行号组成。看下面三个图,说明了几种情况,一种是表是一个聚集索引,表是一个非聚集索引,表是两种都有的情况。
有很多资料上都把索引的图正着画的,但是我认为这样子画会更好理解,比如叶子节点恰好就是一列数据,下面来看一下一个查询的图,比如
select * from tb where id=100;这种类型的,那么图就这样显示
在公司写,感觉还是说得不够详细,年后准备写后面不部分,说怎么创建索引。
总结一下这篇主要写的内容:
1.索引结构
2.B树和查找
3.表的结构
4.聚集索引和非聚集索引区别
4.几种不同情况的表上索引的结构(那几个图,很重要)。