教你如何轻松掌握SQL索引

来源:互联网 时间:1970-01-01

     SQL索引在数据库优化中占有一个非常大的比例,一个索引优化的表比一个没有索引或者索引混乱的表性能相差是非常大的,当然具体差多少,是根据数据库的数据量决定的,1条数据可能基本没相差,如果是几百万的数据库,你就会发现相差何止百倍,很多朋友都知道如何创建索引,什么时间去创建索引,但是对于索引的工作原理和内部的一些机制都是模模糊糊,在这里,给大家介绍一下个人的一些心得,我一般写一些东西的原则就是:用最简单,最通俗的语言,介绍最复杂的逻辑。

 

    首先,无索引的表,查询时,是按照顺序存续的方法扫描每个记录来查找符合条件的记录,这样效率十分低下,举个例子,如果我们将字典的汉字随即打乱,没有前面的按照拼音或者部首查询,那么我们想找一个字,按照顺序的方式去一页页的找,这样效率有多底,大家可以想象。

 

      而我们的索引就是字典前面的目录,可以按照拼音和部首去查询,我们想查询一个字,只需要根据拼音或者部首去查询,就可以快速的定位到这个汉字了,这个就是索引的好处,就像字典一样有按照拼音查询和部首查询,sql的索引也有两种,聚集索引和非聚集索引,当然还有其他的一些,例如符合索引或唯一索引,但是后面这些基本上上很少用到,我们在这里主要介绍一下聚集索引和非聚集索引。

 

     聚集索引和非聚集索引的根本区别是表记录的排列顺序和与索引的排列顺序是否一致,其实理解起来非常简单,还是举字典的例子:如果按照拼音查询,那么都是从a-z的,是具有连续性的,a后面就是b,b后面就是c, 聚集索引就是这样的,他是和表的排列顺序是一样的,例如有id为聚集索引,那么1后面肯定是2,2后面肯定是3,所以说这样的搜索顺序的就是聚集索引。非聚集索引就和按照部首查询是一样是,可能按照偏房查询的时候,根据偏旁‘弓’字旁,索引出两个汉字,张和弘,但是这两个其实一个在100页,一个在1000页,(这里只是举个例子),他们的索引顺序和数据库表的排列顺序是不一样的,这个样的就是非聚集索引。

      所以下面的一句话大家就很容易理解了:聚集索引存储记录是物理上连续存在,而非聚集索引是逻辑上的连续,物理存储并不连续。还有一个小知识点就是:聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个。

 

      原理明白了,那他们是怎么存储的呢?在这里简单的说一下,聚集索引就是在数据库被开辟一个物理空间存放他的排列的值,例如1-100,所以当插入数据时,他会重新排列整个整个物理空间,而非聚集索引其实可以看作是一个含有聚集索引的表,他只仅包含原表中非聚集索引的列和指向实际物理表的指针。他只记录一个指针,其实就有点和堆栈差不多的感觉了。

 

 

 以上纯属个人观点,转载请注明出处

 


相关阅读:
Top