Mysql索引原理及应用场景
 自在人生  分类:IT技术  人气:48  回帖:0  发布于2年前 收藏

# 什么是索引

在工作当中,涉及到Mysql的查询,我们经常会遇到给某个表某个字段加索引的诉求,加上索引能够让我们的sql得到查询速度上的提升。但索引的原理是什么呢,他又是怎么工作的,需要开发者对基础知识有一定的了解。

# 索引分类

索引通过特定的一些数据结构,将数据组织有序,将随机I/O变为顺序I/O,有效减少查询一条数据所需要扫描的数据量,加快查询的速度。

从使用者的角度而言,Mysql索引主要为以下几种。

主键索引

根据数据表主键建立的索引,不允许重复和空值。主键索引列全表唯一

alter table 'table_name' add primary key pk_index_name('col_name');

唯一索引

用于确保建立索引列内的值是唯一的,允许空值。比如同样为age字段,不能出现2个age为10的数据

alter table 'table_name' add unique unique_index_name('col_name');

普通索引

用于表中的普通列构建的索引,没有特殊限制

alter table 'table_name' add index index_name('col_name');

联合索引

采用多个列组合构建的索引,用于组合搜索

alter table 'table_name' add index index_name('col1_name','col2_name');

全文索引

用于大文本对象的列构建索引

alter table 'table_name' add fulltext index full_index_name('col_name');

空间索引

用于GIS地图数据的索引,Mysql中的空间数据类型有GEOMETRY、POINT、LINESTRING、POLYGON

alter table 'table_name' add spatial index spa_index_name('col_name');

# 索引数据结构

根据数据结构的不同,Mysql的索引可分为哈希索引BTree索引B+Tree索引

哈希索引

哈希索引通过hash表实现,通过将hash函数计算出的hash值存储在索引中,来完成key-value的快速查询

通常而言当发送hash碰撞之后(即两个key在经过hash函数之后值为同一个),采用链地址法解决冲突,如上图中小刘到小王的连接线,获取key找到索引地址之后,顺序遍历地址内的链表,获得最终结果。

哈希索引的特点和hashmap类似,适合于精确查找,但不适合范围查找,hash码并不具有规律性,所以存储hash索引时顺序性是无法保障的。

BTree索引

关于平衡二叉搜索树的概念和意义可以详见我的另一篇文章

 标签: 暂无标签

讨论这个帖子(0)垃圾回帖将一律封号处理……