mysql索引的用途:mysql
保持数据的完整性;算法
优化数据的访问性能sql
改进表的连接(join)操做数据结构
对结果进行排序性能
简化聚合数据操做优化
索引的数据结构:B-、B+、R-、散列spa
散列实现对直接查找方式能提供最优的性能,但对必定范围的查找却效率底下。设计
B-树索引实现是一个专门为范围查询设计的。3d
B-树:指针
B-树结构支持插入、控制操做以及经过管理一系列树根状结构的彼此联通的节点中来作选择。B-树结构中有两种节点类型:索引节点和叶子节点。叶子节点是存储数据的,而索引节点是用来告诉用户存储在叶子节点中的数据的顺序,并帮助用户找到数据。B-树不是二叉树,二叉树只是一种简单的节点层次结构的实现。有关B-树的数据结构概念、数学证实以及技术描述的信息参见:http://en.wikipedia.org/wiki/Btree.
B+树
B+树是B-树结构的加强版,尽管B+树支持B-树的全部特性,他们之间最显著的不一样点在于B+树中底层数据是按照说起的索引列进行排序的。B+树还经过在叶子节点之间附加引用来优化扫描的性能。http://en.wikipedia.org/wiki/B%2B_tree
散列
散列表数据结构是一个简单的概念,他将一种算法应用到给定值中以在底层数据存储系统中返回一个惟一的指针或位置。散列表的优势是始终以线性时间复杂度找到须要读取的行的位置,而不想B-树那样须要跨越多层节点来肯定位置。
http://en.wikipedia.org/wiki/Hash_table
通讯R-树
R-树数据结构支持基于数据类型对集合数据进行管理。目前只有MyIsam使用R-树支持空间索引。使用空间索引也有不少限制,好比只支持惟一的NOT NULL 列等。空间索引并不经常使用。http://en.wikipedia.org/wiki/R-tree。