索引是什么?
它是与表或者视图关联的磁盘上结构,可以加快从其中检索数据的速度。
索引包含由表或视图中一列或多列生成的键,并把这些键存储在一个结构中,是数据库可以从多个维度去搜索你需要的数据。
为什么会变快?
没有索引,查找数据只能通过遍历的方式找到自己想要的数据。有了索引之后,我们可以直接锁定数据的位置。
就像你读书的时候,没有目录,每次看都得从头开始找,这样的话,效率是不是很低。
主键和索引有什么联系和区别吗?
主键可以是表中的一个或是多个字段,用于唯一标识这一行数据的,就像人的身份证一样,有很多位,但是没有任何一个人的身份证号是一样的。
而索引则是对特定信息的标识,就像在学校就可以通过学号来快速检索到你。
其实主键相当于表格的索引,我们在创建数据表的时候,会默认id为数据表的主键。
小编来解释:如果主键是一行唯一的表示,那么主键构成的数据表就相当于一本书的目录,而索引则是从不同的角度来给这本书创建目录,从而使读书者更快的定位到自己想要阅读的部分。
索引的数据结构?
其实有了索引的数据表存储的时候,是以“平衡树”(非二叉)的形式存储的(有的数据库也使用哈希桶作为索引的数据结构),所以我们创建的那些带有主键的表格,从严格的意义上来讲,它们已经不是表了,它们变成了一种整齐的树状结构,此时整个表都变成了一个索引。
这就是我们常见的聚焦索引。
聚集索引
所谓的聚集索引:除了目录本身,字典的正文部分就是一个目录。比如班级排队,本身就是按照身高的高矮排列,当你要最高的人的时候,你直接去最后边找就好,而不用去看班级的人员名单,去查看每个人的战队位置。
非聚集索引
与聚集索引相反,正文就是纯粹的正文,没有任何顺序而言,如果你想要找到你要的东西,只能通过目录去查找它的位置。
它们区别在于,聚焦索引可以查到所需要的数据,而通过非聚焦索引可以查到记录对应的主键值,再使用主键值通过聚焦索引查找需要的数据。所以,能够找到数据的唯一路径就是通过主键。
有什么不足?
我们每给字段添加一个索引,字段对应的数据就会被复制一份出来,生成索引。所以,生成索引会增加表的体积,暂用磁盘存储空间。
什么时候用?
1.做主键
2.主外键连接的列,可以加快连接速度
3.经常需要操作(查询,排序)的列
这是小编学习之后一下简单的总结,如有不足,欢迎大家批评指导!