[DB] MySQL 索引分类
按数据结构
- B树索引
- 数据位于叶子节点,到任何一个叶子节点的距离相同,一般不超过3-4层
- B+树索引:每个叶子节点除了数据还存放前后叶子节点的指针,方便快速检索,是InnoDB采用的索引结构
- Hash索引
- 对数据建立Hash表,数据本身无序存储
- LSM树索引
- 所有写操作先进入内存中的分段,排序合并后写入硬盘
- Fulltext索引
- R树索引
- 用于索引空间信息
按实现方式
- 聚集索引(聚簇索引)
- 叶子节点存放数据
- 优点:按主键排序存储数据,查询效率高
- 缺点:
- 插入速度严重依赖插入顺序,按主键顺序插入最快,否则会出现页分裂影响性能
- 插入、删除、更新效率低
- 通过二级索引访问需要两次索引查找(主键-->行数据)
- 非聚集索引(非聚簇索引)
- 不影响数据表的物理存储顺序
- 叶子节点存储主键值,或指向数据的指针
- 访问数据需要二次查找,第一次找到主键值,第二次根据主键值找到数据
按功能
- 普通索引:用于提高查询效率,没有约束
- 唯一索引:在普通索引基础上,增加数据唯一性的约束,一张表里可以有多个
- 主键索引:在唯一索引基础上,增加了不为空的约束,一张表里最多只有一个
- 全文索引:ES和Solr
按字段个数
- 单一索引:索引列为一列
- 联合索引:索引列为多列
按对应键
- 主键索引
- 对主键创建的索引
- 叶子节点只能按一棵B+树排序,故一张表只能有一个
- InnoDB下是聚簇索引,MyISAM下是非聚簇索引
- 辅助键索引(二级索引)
- 对非主键创建的索引
- 一张表可以有多个
按存储引擎
- InnoDB
- 主索引:保存数据,key是表的主键
- 辅助索引:记录主键的值而不是地址
- 实现方式:聚集索引(数据和索引在一起)
- MyISAM
- 主索引:索引和数据分离,索引叶子节点仅保存数据地址
- 辅助索引:和主索引无区别
- 实现方式:非聚集索引(数据和索引不在一起)


参考
https://www.cnblogs.com/jiawen010/p/11805241.html
https://www.jianshu.com/p/fa8192853184
[DB] MySQL 索引分类的更多相关文章
- mysql 索引分类以及用途分析
MySQL索引分为普通索引.唯一性索引.全文索引.单列索引.多列索引等等.这里将为大家介绍着几种索引各自的用途. 一. MySQL: 索引以B树格式保存 Memory存储引擎可以选择Hash或BTre ...
- mysql索引分类
mysql索引分类 一.总结 一句话总结: 主键索引:设定为主键后数据库会自动建立索引,innodb为聚簇索引 单值索引:一个索引只包含单个列,一个表可以有多个单列索引:CREATE INDEX id ...
- mysql索引分类及实现原理
索引分类:主键索引.唯一索引.普通索引.全文索引.组合索引 1.主键索引:即主索引,根据主键pk_clolum(length)建立索引,不允许重复,不允许空值 ALTER TABLE 'table_n ...
- MySQL索引分类及相关概念辨析
本文链接:https://www.cnblogs.com/ibigboy/p/16198243.html 之前的一篇<MySQL索引底层数据结构及原理深入分析>很受读者欢迎,成功地帮大家揭 ...
- mysql 索引分类
在数据库表中,对字段建立索引可以大大提高查询速度.通过善用这些索引,可以令 MySQL的查询和运行更加高效.索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常 ...
- mysql索引分类及注意事项
MYSQL索引主要分为四类:主键索引,普通索引(聚合,非聚合),唯一索引,全文索引 全文索引,主要是针对对文件,文本的检索, 比如文章, 全文索引针对MyISAM有用. 索引的原理:利用二叉树(哈希表 ...
- Mysql索引分类和索引优化
一. MySQL: 索引以B树格式保存 Memory存储引擎可以选择Hash或BTree索引,Hash索引只能用于=或<=>的等式比较. 1.普通索引:create index on Ta ...
- MySQL索引分类和各自用途
一. MySQL: 索引以B树格式保存 Memory存储引擎可以选择Hash或BTree索引,Hash索引只能用于=或<=>的等式比较. 1.普通索引:create index on Ta ...
- MySQL索引的分类、结构、使用场景
MySQL索引分类 1.主键索引:设定为主键后数据库会自动建立索引,innodb为聚簇索引 语法: 随表一起建索引: CREATE TABLE customer (id INT(10) UNSIGNE ...
随机推荐
- JS中dom操作的事件
Click--点击事件 优先级:dom.onclick 高于标签上的onClick属性 监听事件 --不会覆盖前面的事件效果 dom.addEventListener() 括号里面有三个参数 1 ...
- 记一次在virtualbox中安装windows7遇到增强功能安装分辨率的问题
在windows7中遇到很多次安装好增强功能后并不能对其实现放大分辨率,使其跟随虚拟机界面大小而改变. 经过许多次的安装和恢复快照,发现了在设置中,显存的大小一直都是处于边缘的状态, 关闭虚拟机后,我 ...
- 机器学习--Micro Average,Macro Average, Weighted Average
根据前面几篇文章我们可以知道,当我们为模型泛化性能选择评估指标时,要根据问题本身以及数据集等因素来做选择.本篇博客主要是解释Micro Average,Macro Average,Weighted A ...
- Python:函数解释(面向过程)
1. 函数概述 在编程的语境下,函数 (function) 是指一个有命名的.执行某个计算的语句序列 (sequence of statements) .函数可以针对某类问题建立了通用解决步骤(算法) ...
- 浙大MOOC《数据结构》随笔
第一讲 基本概念 1.1 什么是数据结构 图书摆放问题: 新书如何插入? 先定类别,再二分查找 怎么找到指定某本书? 二分查找 写程序实现一个函数PrintN 循环实现 void PrintN(int ...
- Go-25-文件管理
FileInfo接口 package main import ( "fmt" "os" ) // FileInfo 接口文件的信息包括文件名.文件大小.修改权限 ...
- git merge --ff/--no-ff/--ff-only 三种选项参数的区别
前言 git merge 应该是开发者最常用的 git 指令之一, 默认情况下你直接使用 git merge 命令,没有附加任何选项命令的话,那么应该是交给 git 来判断使用哪种 merge 模式, ...
- scrapy爬虫框架调用百度地图api数据存入数据库
scrapy安装配置不在本文 提及, 1.在开始爬取之前,必须创建一个新的Scrapy项目.进入自定义的项目目录中,运行下列命令 scrapy startproject mySpider 其中, my ...
- Java Case Interview
什么是面向对象? 面向对象和面向过程的区别: 面向过程更注重每一个步骤以及其顺讯,面向对象更注重哪些对象,他们具有哪些能力 面向过程比较直接,而面向对象更易于复用.扩展和维护 三大特性: 封装:内部细 ...
- Linux内核软中断
1 软中断概述 软中断是实现中断下半部的一种手段,与2.5以前版本的下半段机制不同.软中断可以同时运行在不同的CPU上. 1.1 软中断的表示 内核中用结构体softirq_action表示一个软中断 ...