索引是什么? 【转--形象】

索引是什么?

我们由一个故事说起,假如你继承了一家频临倒闭的书店,书店只剩下一个书架,而且书籍只有几十本。买书人把书名交给你,你则把这本书找出,并交给买书人。由于你出色的经营,你的书店规模越来越大,书的品种越来越多,书本数越来越来多,由原来的几十本,增加到了600本; 在这个过程中,你不断的为书店增添新的书架,上架新的书籍。由原来的1个书架,增加到了6个书架。你越来越力不从心,每当买书人,交给你一本书籍的名称时,你发现查找书籍用时越来越长,有时甚至把6个书架查完,才能找到想要的书籍。这时,你迫切的希望找到一种简单的方法,能快速的根据书籍名称找到它在哪个书架上的方法,这样就不需要查6个书架了,只在一个书架上查询这本书。

由于你是一个聪明的人,你分析出了之所以根据书名不能快速找到书在哪个书架的原因,是因为书籍的名称和书所在的书架没有关系。所以为了使书籍与书架拥有关系,你改变之前哪个书架有位置,就随机的把书籍给放上的方式,你规定左一位置的书架只存放书籍名称拼音首字母是a的书;左二位置的书架...b的书;左三位置的书架...c的书;右一位置的书架...d的书;右二位置的书架...e的书;其余的书存放到右三书架。

有了这套方法,在查找任何一本书的时候,根据书籍的拼音首字母,就可计算出书籍所在的书架。买书人把书名交给你,每次你只需要在一个书架上查找即可。

好了,现在我们来整理一下,你做了什么,让你能够根据用户给的书籍名称快速的查找书籍所在的书架位置。你拥有无序的原数据(书架和书),在上架书籍的时候,不在无序把书籍放到书架,也就是说摆放后的书架与书有了一定的数据结构(摆放结构)。有序的书架与书被称为索引,这个摆放的过程也叫做索引。

索引作为名词时,索引是一种有特殊数据结构(书架与书的摆放是有序的)的数据(摆放后的书架与书籍),这份数据是由原数据(书架与书籍)转化而来的。利用它的特殊结构,适用某种情况(给出书籍名称,想要找到它摆放的书架)的查找。索引作为动词时,它表示把一份原数据生成一份索引(有特殊数据结构的数据)的过程。

 

至此,或许你不明白B+树索引、hash索引、R-Tree索引、聚集索引、非聚集索引、主键索引、单列索引、多列索引、唯一索引、空间索引、正排索引、倒排索引、全文索引,形形色色索引的具体结构,但是你一定可以理解它们都拥有自己独特的结构,适用某种情况的查找;

 

拓展

索引的优势 适用于某种情况的查找。

索引的劣势 需要一定的消耗(有序摆放书籍,肯定比无序浪费时间)才能把原数据转为索引。

数据倾斜是什么? 按照你的摆放方式,你的600本书籍,左二位置的书架摆放了1本书,左二位置的书架...1本书;左三位置的书架...1本书;右一位置的书架...1本书;右二位置的书架...1本书;其余的595本书存放到右三书架。

数据倾斜有什么影响? 书架可能不够大,不能存放595本书;若是查找595本书中的一本,你的查找时间不见得有减小。

数据倾斜怎么办? 调整摆放策略。如左一位置的书架只存放书籍名称第一个字的拼音首字母是a到c的书;左二位置的书架...d到f的书;左三位置的书架...g到j的书;右一位置的书架...k到m的书;右二位置的书架...n到s的书;其余的书存放到右三书架。

posted @ 2021-09-17 10:59  融爸  阅读(271)  评论(0)    收藏  举报