前篇:
小鸦视角-看关系数据库MSSQL-view(视图)+存储过程+索引
前篇, 我为了比较index(索引)和view(视图), 将index比喻成静态语言.
当我们写完Java代码后, 就要进行编译, 生成class文件(字节码文件), 最后就用指令执行class文件.
而上述过程中, 其实我们省略了一个过程, 编译是通过JVM来编译, 同比, index也是如此, 它也是需要”JVM”编译.
而我们今天所讲的索引的类型: 群集索引, 非群集索引(堆上的非群集索引, 群集索引上的非群集索引) 也就是 JVM编译时使用的不同策略
群集索引, 英文 Clustered index. 就是聚集起来的index, 打个比方, 就是你在千千万万个人里( 原表 ) 找几百个人, 聚在在一起弄成一个小区( Clustered index )
而非群集(Nonclustered)索引, 在千千万万个人里, 几百个人, 组成一个论坛, 但是实际他们的住址是不同的.
从上述的描述来讲, 我们可以知道, clustered index是比较容易找到人的, 因为他们已经聚集在一起. (也就是 index查找完就直接找到数据)
而相反, Nonclustered index , 是迫于无奈的一种选择. (没办法在一起, 就只能通过网络的方式)(也就是 index查找完一次后还要去他家找人)
群集索引和堆上的非群集索引的区别:
前者是 ,小区都是平房, 找就直接找到, 后者是小区是高楼, 你找到那栋楼, 还要找第几层. 多了一步
群集索引上的非群集索引 为何这么特殊, 当初分小区的时候, 他们以为他们的共同爱好是一样…就这样分了, 然后咧!!! 其实小区A的张某,小区B的李某, 小区C的陈某爱好才是一样… 但是, 这不能说自己搬就搬, 自己开发个小区就开发… 最终大家就只能在网上开个论坛.
群集索引和堆上的非群集索引 找人时候, “哦, 我记得4号房有我喜欢聊天的人”, 就直接去找4号房
群集索引上的非群集索引, “哦, 我今天想和李某面基, 我先得上论坛, 看看他基本信息, 再找找地址”, 然后才能去李某家.
以上, 大家看出区别吗, 前者通常是用数字来查找, 后者是用字符串来查找( select * from table like 李某).
以上就是我对聚集索引和非聚集索引的初步了解.