MySQL索引知识学习笔记
继我的上篇博客:Oracle索引知识学习笔记,再记录一篇MySQL的索引知识学习笔记,本博客是我在学习尚硅谷的学习教程后,做的笔记,当然我不是为了所谓宣传,仅仅是学习记录的笔记。本来可以不分享出来,不过,分享出来的笔记不仅可以给网上的学习者参考学习,同时写在csdn比较方便,可以支持图片上传,也方便自己以后查找复习
@
一、索引的概念
MySQL官方给出的索引定义:索引(Index)是帮助MySQL高效获取数据的数据结构。所以说索引就是排好序的快速查找数据结构
二、索引分类
MySQL的索引可以分为几种:
- 单值索引:单值索引就是只包含一个列的索引
- 唯一索引:唯一索引要求索引列的必须是唯一的,比如说主键或者unique索引,但是还是允许空值
- 复合索引:复合索引就是包含多个列组成的索引
三、索引用法
- 创建索引
create [unique] index indexName on tableName(columnName(length));
比如给dept表创建索引idx_dept_id
create idx_dept_id on dept(id);
- 修改索引
ps:修改索引也可以用于新增索引
语法:
alter tablename add [unique] index indexname on columnName(length);
- 删除索引
drop index indexname on tablename;
- 查看索引
show index from tablename ;
如果要显示换行可以加上\G,不过就不能加上分号
show index from tablename \G
- 附录:
来自尚硅谷老师总结的新增索引的方法:
# 添加一个主键,主键是唯一的,不能为Null
alter table tablename add PRIMARY KEY(columnName);
#创建唯一索引,要求索引唯一,不过允允许空值
alter table tablename add unique index indexname on(columnName);
# 创建普通的索引,索引数据可以不唯一
alter table tablename add index indexname on(columnName);
# 指定索引为FullText,用于全文索引
alter table tablename add FULLTEXT indexname on(columnName);
四 、索引架构简介
MySQL的索引结构可以分为:
- BTree索引
- Hash索引
- full-text全文索引
- R-Tree索引
引用尚硅谷MySQL教程的图,本博客只介绍BTree索引的

从图可以看出BTree索引的结构其实就是一棵B+树,并不一定是二叉树,也有可能是一棵多叉树,MySQL也是分为段区块这种结构的,如图,浅蓝色部分就是一个磁盘块,蓝色部分表示数据项,而黄色部分表示指针
假如我要查找29这个值,就是遍历下来,分别查找磁盘块1、磁盘块3、磁盘块8,根据指针查找下来,速度非常块,假如有几百万数据的话,能走索引的情况,是非常快的,性能对比可想而知
注意:只有叶子节点(最下面的节点)是存储要查找的数据的,非叶子节点存储的数据只是用于指针索引的数据项而已
五、索引适用的情况
- 1、频繁用于查询的条件适合建立索引
- 2、主键默认要加上Primary索引
- 3、和其它表有外键关系的列建立索引
- 4、where条件后面的条件列可以建上索引
- 5、用于排序order by的列可以加上索引
- 6、用于分组group by的列可以加上索引
注意:需要经常修改的列不适合建立索引,因为更新数据的同时也会重新构建索引,比较耗性能;在高并发的情况,更倾向于建立组合索引,因为一般来说,查询很少有一个条件,一般是多个条件,复合索引比较适合
六、索引不适用的情况
- 1、需要经常增删改的表
- 2、表的记录很少的情况,加了索引效果不明显
- 3、如果某个数据列包含很多重复的数据,比如用户信息表的性别这个列,一般只有两种情况,所以加了索引,是没有太大的实际效果的
注意:索引应该加在经常查询或者排序的列,数据重复而且分布很平均的情况,是不适合加索引的
引用尚硅谷老师的归纳:
MySQL索引知识学习笔记的更多相关文章
- Oracle索引知识学习笔记
目录 一.Oracle索引简介 1.1 索引分类 1.2 索引数据结构 1.3 索引特性 1.4 索引使用注意要点 1.5.索引的缺点 1.6.索引失效 二.索引分类介绍 2.1.位图索引 1.2.函 ...
- mySQl数据库的学习笔记
mySQl数据库的学习笔记... ------------------ Dos命令--先在记事本中写.然后再粘贴到Dos中去 -------------------------------- mySQ ...
- MYSQL视图的学习笔记
MYSQL视图的学习笔记,学至Tarena金牌讲师,金色晨曦科技公司技术总监沙利穆 课程笔记的综合. 视图及图形化工具 1. 视图的定义 视图就是从一个或多个表中,导出来的表,是一个虚 ...
- Mysql数据库基础学习笔记
Mysql数据库基础学习笔记 1.mysql查看当前登录的账户名以及数据库 一.单表查询 1.创建数据库yuzly,创建表fruits 创建表 ) ) ,) NOT NULL,PRIMARY KEY( ...
- MySQL索引的学习
MySQL索引的学习 关于使用mysql索引的好处,合理的设计并使用mysql索引能够有效地提高查询效率.对于没有索引的表,单表查询可能几十万数据就是平静,在大型网站单日可能会产生几十万甚至几百万的数 ...
- Objective-c基础知识学习笔记
Objective-c基础知识学习笔记(一) 一直有记录笔记的习惯.但非常久没分享一些东西了,正好上半年開始学习IOS了,如今有空写点.因开发须要,公司特意为我们配置了几台新MAC.还让我们自学了2周 ...
- MySQL之InnoDB索引面试学习笔记
写在前面 想要做好后台开发,终究是绕不过索引这一关的.先问自己一个问题,InnoDB为什么选择B+树作为默认索引结构.本文主要参考MySQL索引背后的数据结构及算法原理和剖析Mysql的InnoDB索 ...
- MySQL 索引知识整理(创建高性能的索引)
前言: 索引优化应该是对查询性能优化的最有效的手段了.索引能够轻易将查询性能提高几个数量级. // 固态硬盘驱动器有和机械硬盘启动器,有着完全不同的性能特性: 然而即使是固态硬盘,索引的原则依然成立, ...
- PHP和MySQL Web开发学习笔记介绍
前言 从2016年2月1日开始,之后的几个月左右的时间里,我会写一个系列的PHP和MySQL Web开发的学习笔记.我之前一直从事Java语言的开发工作,最近这段时间非常想学习一门语言,就选择了PHP ...
随机推荐
- STM32 HAL_Deleay() 函数 导致程序卡死
出现问题场景: 我的程序有RTOS操作系统.使用的驱动库是STM32官方最新的HAL库. 移植好LwIP以太网协议后,在初始化网卡阶段程序卡死. 出现问题原因: 后经过蠢笨的printf打 ...
- Centos8_本地Yum源配置
一.先将iso镜像文件挂载 mount /dev/cdrom /mnt 将cdrom挂载到/mnt下 二.编辑挂载文件 cp -a /mnt/media.repo /etc/yum.repos.d/ ...
- post请求四种传送正文的方式
一.简介 HTTP协议规定post提交的数据必须放在消息主体(entity-body)中,但协议没有规定数据必须使用什么编码方式.HTTP协议是以ASCII码传输,建立再TCP/IP协议之上的应用层规 ...
- Hive参数调优
调优 Hive提供三种可以改变环境变量的方法,分别是: (1)修改${HIVE_HOME}/conf/hive-site.xml配置文件: 所有的默认配置都在${HIVE_HOME}/conf/hiv ...
- Go语言常见坑
可变参数是空接口类型当参数的可变参数是空接口类型时,传人空接口的切片时需要注意参数展开的问题.func main() { var a = []interface{}{1, 2, 3} fmt.Prin ...
- 松软科技web课堂:JavaScript 数组
JavaScript 数组用于在单一变量中存储多个值. 实例 var cars = ["Saab", "Volvo", "BMW"]; 什么 ...
- JavaScript 语法:松软科技前端教程
JavaScript 语法是一套规则,它定义了 JavaScript 的语言结构. var x, y; // 如何声明变量 x = 7; y = 8; // 如何赋值 z = x + y; // 如何 ...
- Zimbra
第一步:利用XXE读取配置文件 这里利用了CVE-2019-9670漏洞来读取配置文件,你需要在自己的VPS服务器上放置一个dtd文件,并使该文件能够通过HTTP访问.为了演示,我在GitHub上创建 ...
- NumPy实现数据的聚合,计算最大值,最小值
1.数组值的求和 首先构造一个具有100个值的数组,然后我们利用两个不同的方法进行求和: >>> l=np.random.random() l的数据如下: >>> ...
- Ubuntu16.0 GTX1660Ti 安装NVIDIA CUDA cuDNN Tensflow
主要参考这篇文章Ubuntu16.04(GTX1660ti)cuda10.0和cudnn7.6环境配置 (环境乃一生之敌!!!). 容易错的点: 安装NVIDIA驱动的时候选择run版本,不要选择de ...
