MySQL 学习笔记(18)— 索引的分类、创建、查看、删除等
1. 索引类型
1.1 唯一索引与非唯一索引
唯一索引( UNIQUE
)中的索引值必须唯一,可以确保被索引的数据不会重复,从而实现数据的唯一性约束。
非唯一索引允许被索引的字段存在重复值,仅仅用于提高查询的性能。
1.2 单列索引与多列索引
单列索引是基于单个字段创建的索引。例如,员工表的主键使用 emp_id
字段创建,就是一个单列索引。
多列索引是基于多个字段创建的索引,也叫复合索引。创建多列索引的时候需要注意字段的顺序,查询条件中最常出现的字段放在最前面,这样可以最大限度地利用索引优化查询的性能。
1.3 全文索引与函数索引
全文索引(Full-text),用于支持全文搜索,类似于 Google 和百度这种搜索引擎。
函数索引,基于函数或者表达式的值创建的索引。例如,员工的 email 不区分大小写并且唯一,可以基于 UPPER(email) 创建一个唯一的函数索引。
2. 创建索引
使用 CREATE INDEX
语句创建索引,默认情况下创建的是 B+
树索引:
CREATE [UNIQUE] INDEX index_name
ON table_name(col1 [ASC | DESC], ...);
其中, UNIQUE
表示创建唯一索引; ASC
表示索引按照升序排列, DESC
表示索引按照降序排列,默认为 ASC
。以下语句为表 emp_devp 的员工姓名字段创建一个普通索引:
CREATE INDEX idx_emp_devp_name ON emp_devp(emp_name);
定义主键和唯一约束时,数据库自动创建相应的索引。 MySQL InnoDB
存储引擎也会自动为外键约束创建索引。
3. 查看索引
MySQL
提供了 SHOW INDEXES
命令查看表的索引:
其中 PRIMARY
是系统自动为主键创建的索引。
4. 删除索引
DROP INDEX
语句用于删除一个索引:
-- Oracle 和 PostgreSQL 实现
DROP INDEX idx_emp_devp_name;
对于 MySQL
和 SQL Server
而言,删除索引时需要指定表名:
-- MySQL 和 SQL Server 实现
DROP INDEX idx_emp_devp_name ON emp_devp;
5. 索引缺点
既然索引可以优化查询的性能,那么我们是不是应该将所有字段都进行索引?显然并非如此,因为索引在提高查询速度的同时也需要付出一定的代价。
首先,索引需要占用磁盘空间。索引独立于数据而存在,过多的索引会导致占用大量的空间,甚至超过数据文件的大小。
其次,对数据进行 DML 操作时,同时也需要对索引进行维护;维护索引有时候比修改数据更加耗时。
MySQL 学习笔记(18)— 索引的分类、创建、查看、删除等相关推荐
- oracle 隐藏视图定义,【学习笔记】show hidden parameter 创建查看隐藏参数视图
天萃荷净 分享一篇开发DBA常用的show hidden parameter,创建查看隐藏参数视图的案例步骤 1.创建查看隐藏参数视图(show_hidden_v$parameter) --conn ...
- MySQL 学习笔记(6)— 存储过程创建、调用、删除以及带参数的存储过程
1. 存储过程总结 存储过程是一种存储在数据库中的程序.它可以包含多个 SQL 语句,并提供许多过程语言的功能,例如变量定义.条件控制语句.循环语句.游标以及异常处理等. 1.1 存储过程优点 实现代 ...
- Mysql学习笔记3-数据类型+创建数据表+唯一性
有符号:数字的最高位用0表示正数,用1表示负数 无符号:永远都是正数. 数据优化的一个原则,是选则最合理.最合适的数据类型,因为所占空间小. 定长类型:CHAR(少的字节会自动补偿空格) 变长类型:V ...
- 【MySQL】启动、数据库/数据表 创建/查看/删除
文章目录 1. 启动数据库 mysql -u root -p 2. 数据库创建.查看.删除 2.1 数据库查看 show databases 2.2 选择数据库 select database() m ...
- mysql原生建立索引_MySQL学习笔记之索引
索引是存储引擎用于快速找到记录的一种数据结构. 索引对于良好的性能非常关键.尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要.在数据量较小且负载较低时,不恰当的索引对性能的影响可能还不明显,但 ...
- mysql 查找相似数据_MySQL学习笔记之索引
索引是存储引擎用于快速找到记录的一种数据结构. 索引对于良好的性能非常关键.尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要.在数据量较小且负载较低时,不恰当的索引对性能的影响可能还不明显,但 ...
- mysql 学习笔记--存储引擎、索引、sq优化
全面的 mysql学习笔记–通用语法.函数.数据类型.约束.多表查询.事务 全面的 mysql学习笔记–存储引擎.索引.sql优化 全面的mysql学习笔记–视图/存储过程/触发器.锁.InnoDB引 ...
- MySQL学习笔记-主键索引和二级索引
文章目录 MySQL学习笔记-主键索引和二级索引 1.笔记图 2.索引的常见模型 3.InnoDB 的索引模型 4.主键索引和普通索引查询的区别 5.如何选择主键字段 6.笔记图 7.回表过程 8.最 ...
- MySQL学习笔记04【数据库的查询操作、今日内容、表的约束】
MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...
- MySQL 学习笔记②
若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 视频链接:https://www.bilibili.com/video/BV1Kr4y1i7ru 资料链接 ...
最新文章
- vnpy官网说明文档网址
- mac homebrew装mysql_mac系统homebrew安装mysql
- php sort_flags
- 屏幕输出语句_第三章 常用输入/输出函数
- 树莓派4b上部署yolov3和v3-tiny记录带截图
- Linux 添加alisa,Linux/shell命令的实际应用——alias增加自定义命令
- for、foreach、stream 哪家的效率更高,你真的用对了吗?
- Tomcat 基于域名的虚拟主机设置
- JDK collections - 使用
- 阶乘末尾 0 的个数
- Tcpdump的详细用法
- PHP学习笔记五(命名空间)
- 软件测试面试常用Linux命令总结
- Ubuntu中解压缩命令
- 矩阵的分解——LU分解
- python字典第一个元素_如何获取python字典中的第一个值
- CSDN如何获得积分白嫖资源?
- win7 装显卡驱动后只显示桌面背景 - 解法办法一例
- win11打不开菜单怎么办?win11打不开开始菜单的9种解决方法
- golang 设置goproxy代理的小细节,适用于go module下载超时,阿里云镜像go module下载超时