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;

对于 MySQLSQL Server 而言,删除索引时需要指定表名:

-- MySQL 和 SQL Server 实现
DROP INDEX idx_emp_devp_name ON emp_devp;

5. 索引缺点

既然索引可以优化查询的性能,那么我们是不是应该将所有字段都进行索引?显然并非如此,因为索引在提高查询速度的同时也需要付出一定的代价。

首先,索引需要占用磁盘空间。索引独立于数据而存在,过多的索引会导致占用大量的空间,甚至超过数据文件的大小。

其次,对数据进行 DML 操作时,同时也需要对索引进行维护;维护索引有时候比修改数据更加耗时。

MySQL 学习笔记(18)— 索引的分类、创建、查看、删除等相关推荐

  1. oracle 隐藏视图定义,【学习笔记】show hidden parameter 创建查看隐藏参数视图

    天萃荷净 分享一篇开发DBA常用的show hidden parameter,创建查看隐藏参数视图的案例步骤 1.创建查看隐藏参数视图(show_hidden_v$parameter) --conn ...

  2. MySQL 学习笔记(6)— 存储过程创建、调用、删除以及带参数的存储过程

    1. 存储过程总结 存储过程是一种存储在数据库中的程序.它可以包含多个 SQL 语句,并提供许多过程语言的功能,例如变量定义.条件控制语句.循环语句.游标以及异常处理等. 1.1 存储过程优点 实现代 ...

  3. Mysql学习笔记3-数据类型+创建数据表+唯一性

    有符号:数字的最高位用0表示正数,用1表示负数 无符号:永远都是正数. 数据优化的一个原则,是选则最合理.最合适的数据类型,因为所占空间小. 定长类型:CHAR(少的字节会自动补偿空格) 变长类型:V ...

  4. 【MySQL】启动、数据库/数据表 创建/查看/删除

    文章目录 1. 启动数据库 mysql -u root -p 2. 数据库创建.查看.删除 2.1 数据库查看 show databases 2.2 选择数据库 select database() m ...

  5. mysql原生建立索引_MySQL学习笔记之索引

    索引是存储引擎用于快速找到记录的一种数据结构. 索引对于良好的性能非常关键.尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要.在数据量较小且负载较低时,不恰当的索引对性能的影响可能还不明显,但 ...

  6. mysql 查找相似数据_MySQL学习笔记之索引

    索引是存储引擎用于快速找到记录的一种数据结构. 索引对于良好的性能非常关键.尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要.在数据量较小且负载较低时,不恰当的索引对性能的影响可能还不明显,但 ...

  7. mysql 学习笔记--存储引擎、索引、sq优化

    全面的 mysql学习笔记–通用语法.函数.数据类型.约束.多表查询.事务 全面的 mysql学习笔记–存储引擎.索引.sql优化 全面的mysql学习笔记–视图/存储过程/触发器.锁.InnoDB引 ...

  8. MySQL学习笔记-主键索引和二级索引

    文章目录 MySQL学习笔记-主键索引和二级索引 1.笔记图 2.索引的常见模型 3.InnoDB 的索引模型 4.主键索引和普通索引查询的区别 5.如何选择主键字段 6.笔记图 7.回表过程 8.最 ...

  9. MySQL学习笔记04【数据库的查询操作、今日内容、表的约束】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  10. MySQL 学习笔记②

    若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 视频链接:https://www.bilibili.com/video/BV1Kr4y1i7ru 资料链接 ...

最新文章

  1. vnpy官网说明文档网址
  2. mac homebrew装mysql_mac系统homebrew安装mysql
  3. php sort_flags
  4. 屏幕输出语句_第三章 常用输入/输出函数
  5. 树莓派4b上部署yolov3和v3-tiny记录带截图
  6. Linux 添加alisa,Linux/shell命令的实际应用——alias增加自定义命令
  7. for、foreach、stream 哪家的效率更高,你真的用对了吗?
  8. Tomcat 基于域名的虚拟主机设置
  9. JDK collections - 使用
  10. 阶乘末尾 0 的个数
  11. Tcpdump的详细用法
  12. PHP学习笔记五(命名空间)
  13. 软件测试面试常用Linux命令总结
  14. Ubuntu中解压缩命令
  15. 矩阵的分解——LU分解
  16. python字典第一个元素_如何获取python字典中的第一个值
  17. CSDN如何获得积分白嫖资源?
  18. win7 装显卡驱动后只显示桌面背景 - 解法办法一例
  19. win11打不开菜单怎么办?win11打不开开始菜单的9种解决方法
  20. golang 设置goproxy代理的小细节,适用于go module下载超时,阿里云镜像go module下载超时

热门文章

  1. 联合索引最左匹配原则成因
  2. 2022-2028年现代农业背景下中国家庭农场深度调研及投资前景预测报告
  3. 2022-2028年中国企业核心路由交换机行业市场前瞻与投资分析报告
  4. 通过python利用哈希值实现比较两个文件的一致性
  5. debian10 简单的bash脚本监控apache运行状态
  6. 中国地址住址五级以下
  7. 深度学习编译器综述The Deep Learning Compiler
  8. 国内操作系统OS分析(下)
  9. 行人检测与重识别!SOTA算法
  10. Subscriber class xxx ,xx already registered to event