MySQL索引的概念
MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构,通俗来讲索引就好比书本的目录,加快数据库的查询速度。
举个简单的例子,见下图:
注意:此例子的中索引结构与数据库中的索引结构差距很大
user表有3个字段(id、name、age),存储8条记录,当我们查找age为20的记录时,sql语句 select * from user where age=20;
1 在没有索引情况下需要依次遍历表里的记录,第6次时找到age=20的记录;
2 如果我们在age列添加索引,只需3次,就可以找到age=20的记录。
正如官方所说:索引是一个数据结构;
通过语句show index from tablename查看索引
可以根据Index_type看出该索引由BTREE数据结构实现;除了BTREE,还有HASH、FULLTEXT、RTREE;
索引的作用
– 提高查询效率
– 消除数据分组、排序
– 避免“回表”查询(索引覆盖)
– 优化聚合查询
– 用于多表JOIN关联查询
– 利用唯一性约束,保证数据唯一性
– InnDB行锁实现
索引的副作用
– 增加I/O成本
– 增加磁盘空间
– 不合适的索引或索引过多,会降低增删改的效率
索引的分类
1 存储结构
– BTREE:InnoDB & MyISAM
– HASH:HEAP,NDB,InnoDB AHI
– Fractal Tree:TokuDB
– RTREE
– FULLTEXT
2 数据的存储方式
– 聚集索引:聚簇索引的顺序就是数据的物理存储顺序,索引与数据存放在同一个文件中。
– 非聚集索引:非聚簇索引的顺序与数据的物理存储顺序不同,索引与数据存放在不同的文件。
3 应用层次
– 单列:主键索引、唯一索引、普通索引
– 多列:复合索引
转载于:https://www.cnblogs.com/sunjingwu/p/9748132.html