Mysql的索引
什么是索引
在mysql中,索引是一种特殊的数据库结构,由数据表中的一列或多列组合而成,可以用来快速查询数据表中有某一特定值的记录。通过索引,查询数据时不用读完记录的所有信息,而只是查询索引列即可。
参考:什么是mysql索引
索引有哪些
MySQL主要有五种索引类型,分别是:
普通索引(NORMAL)
唯一索引(UNIQUE)
主键索引 (PRIMARY)
组合索引
全文索引(FULLTEXT)
1、 B+树索引
InnoDB 是在 MySQL 5.5 之后成为默认的 MySQL 存储引擎,B+Tree 索引类型也是 MySQL 存储引擎采用最多的索引类型。
B+Tree 是一种多叉树,叶子节点才存放数据,非叶子节点只存放索引,而且每个节点里的数据是按主键顺序存放的。每一层父节点的索引值都会出现在下层子节点的索引值中,因此在叶子节点中,包括了所有的索引值信息,并且每一个叶子节点都有两个指针,分别指向下一个叶子节点和上一个叶子节点,形成一个双向链表。
高效的查找、插入和删除操作。
优化的磁盘读写:B+树的结构减少了磁盘I/O操作,因为它将节点大小设置为与磁盘块相等,这减少了磁盘访问次数。
支持范围查询:叶子节点的链表结构使得B+树特别适合执行范围查询,能够快速地遍历指定范围的所有值。
2、 Hash索引
Memory引擎默认支持哈希索引,如果多个Hash值相同,出现哈希碰撞,那么索引就以链表方式存储。InnoDB或MyISAM存储引擎页支持Hash索引,但是需要通过伪Hash索引来实现,叫自适应Hash索引。
优点:
查询速度非常快,只需一次哈希计算即可定位到相应的键值。
适用于等值查询。
缺点:
无法支持范围查询,因为哈希索引不具备排序特性。
无法进行模糊查询(例如 like 'xxx%')。
内存占用较高,因为需要存储哈希值。
3、 全文索引:
Full-text索引一般使用倒排索引实现。倒排索引同B+tree索引一样,也是一种索引结构。
MySQL中InnoDB存储引擎在之前版本中是不支持全文检索的,要使用全文检索的话只能使用MySIAM存储引擎。在 MySQL 5.6.4 版本中InnoDB存储引擎才开始支持Full-text索引。
对于文本类型的大对象,或者较大的CHAR类型的数据,如果使用普通索引,那么匹配文本前几个字符还是可行的,但是想要匹配文本中间的几个单词,那么就要使用LIKE %word%来匹配,这样需要很长的时间来处理,响应时间会大大增加,这种情况,就可使用时FULLTEXT索引了,在生成FULLTEXT索引时,会为文本生成一份单词的清单,在索引时及根据这个单词的清单来索引。
优点:
用于全文搜索,支持关键词匹配。
适用于模糊查询和文本内容搜索。
缺点:
占用空间较大。
不适合精确匹配
详情 可参考:MySQL:索引有哪些(清晰明了)
聚簇索引和非聚簇索引
通俗点讲
聚簇索引:将数据存储与索引放到了一块,找到索引也就找到了数据
非聚簇索引:将数据存储于索引分开结构,索引结构的叶子节点指向了数据的对应行,myisam通过key_buffer把索引先缓存到内存中,当需要访问数据时(通过索引访问数据),在内存中直接搜索索引,然后通过索引找到磁盘相应数据,这也就是为什么索引不在key buffer命中时,速度慢的原因
详情可参考:聚簇索引 和 非聚簇索引详解
索引覆盖
覆盖索引:一个索引包含了满足查询结果的数据就叫做覆盖索引,不需要回表等操作
详情可参考:MySQL高级篇——覆盖索引、前缀索引、索引下推、SQL优化、主键设计
原文地址:https://blog.csdn.net/jdbcmeng/article/details/142375908
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!