对于索引的理解(一)
对于索引本质的理解
MySQL中的索引
索引在MySQL中的定义是帮助mysql高效获取数据的排好序的数据结构。这句话可以看出索引的本质上是一种数据结构,通过相应的数据结构可以给数据标上下标来快速查询。
原始的查询
在表中查询特定数据,一般是采用select * from 表名 where 字段 =值来查询,运行模式:从开始到结尾逐个查询
举个列子:
表A(id=主键)
id | value |
---|---|
12 | |
2 | 5 |
3 | 1 |
4 | 3 |
5 | 8 |
6 | 0 |
比如:我想查询name=0的数值
select * from where name=g;
它的查询方式:从 id=1的那一行向下查询。途中经过2,3,4,5,到6终于查询到了name=8。总共查询5次,试想一下当表中的数据非常之多(千万数据)而且所要查询的数据在表中最末尾的位置,以这种方法查询,在mysql中可能要匹配上千万次才能查询的到。所以这里可以看出原始的查询方法面对数据量大的时候而且原始方法是多么无力了。这个时候索引就起到了很大的作用,加快了表中数据的查询。
索引
索引的介绍(再提)
一、索引帮助mysql高效获取数据排好序的数据结构。
二、索引存储位置:磁盘文件。
三、索引结构:二叉树、红黑树、hash、BTree、B+Tree 。索引结构为了更快找到目标数据。
四、数据结构
索引的数据结构–二叉树
二叉树,一般学过java数据结构的人都知道,它是一种树状结构,对比于显示生活中的数。那么它是如何查询数据的呢?
比如:在表a中查询name=8
查询结构图如下:
从上面的结构可以看到二叉树形式的数据结构以二为根节点,先看查询数值为8,比根节点大,所以向右查询,向下匹配的叶子节点5,发现比叶子节点5大,然后再次向右边的叶子节点查询,匹配到了叶子8,总查询次数3次,比元素查询效率搞了不止一点。但是对于二叉数形式的索引来说,缺点也非常明显,如果我查询的数值为有序的(1,2,3,4,…),那么查询的过程将变成链表形式,实际查询效率与元素查询一样。(未完待续…)