索引(index)是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。——百度百科


正常的一张表,是无序,如果要进行查询(select)操作,理论上会将表中所有记录进行遍历。并且每次查询都需要从第一条到最后一条挨个查找,以防查漏。这样显然是低效的。
为了解决这个问题,引入了索引的概念。索引是将记录按照某个关键字段(key)进行排序,因此,索引的存在是为了便于检索,使得检索查询更加的快速、高效。

0 索引的基本指令

操作 命令
创建索引 CREATE[UNIQUE] INDEX 索引名 ON 表名(列名 [,列名]);
查看索引 SHOW INDEX FROM 表名;
删除索引 DROP INDEX 索引名 ON 表名;
查看索引使用情况 EXPLAIN SELECT ...;

1 索引的结构

最常用的一种保存索引的结构是B树(Balanced Tree,平衡树),是一种像枝叶扩散的树状结构。

图片来自百度百科。
通过这样的树状结构,原本需要遍历所有的记录,进行n次查询,现在最多只要 log2(n)log_2(n)次查询。

2 索引操作指令

2.1 创建索引CREATE INDEX
创建索引的代码为:

CREATE INDEX 索引名 ON 表名(列名);

2.2 查看索引show
查看索引代码:

SHOW INDEX FROM 表名;

2.3 删除索引DROP INDEX
删除索引的代码:

DROP INDEX 索引名 ON 表名;

eg:为表employee的lname_pinyin创建一个索引:

>CREATE INDEX idx_lpy ON employee(lname_pinyin);

2.4 创建多列复合索引

eg:为表employee的lname_pinyin,fname_pinyin创建一个复合索引:

>CREATE INDEX idx_lpy ON employee(lname_pinyin,fname_pinyin);

2.5 创建唯一性索引
如果对index制定了UNIQUE关键字,则表示创建了不可重复的索引。
如为表employee的fname创建一个唯一性索引:


>CREATE UNIQUE INDEX idx_lpy ON employee(fname);

当创建了唯一性索引,插入和该列相同的记录,系统会报错。
如果已有数据重复,创建唯一性索引也会报错
但是,如果创建了一个复合的唯一性索引,则只要两列不完全相同,数据可以成功插入


如图,创建了以fname为关键字的索引,“郭美美”就无法插入,系统会提示报错。
创建以lname为关键字的索引,由于lname有重复数据,所以也无法创建该索引。
而如果创建一个复合索引,以fname和lname,则创建成功。
2.6 分析索引优势
通过EXPLAIN可以确认索引的使用情况;

>EXPLAIN SELECT ...;

eg:查看检索查询lname_pinyin的情况;
然后删除索引,再次查看检索查询name_pinyin 的情况:

>EXPALIN SELECT * FROM employee WHERE lname_pinyin='wang'\G
...
>DROP INDEX idx_pinyin ON employee;
...
>EXPALIN SELECT * FROM employee WHERE lname_pinyin='wang'\G
>...


我们可以看到,当建立索引时,遍历次数为2;而当删除索引后,遍历次数为9,和表中记录数相同。
因此,回到之前所讲:

索引可以大大提高检索的效率。

MySQL数据库索引:删除、查看、创建索引相关推荐

  1. MySQL索引的查看创建和删除

    1.索引作用 在索引列上,除了上面提到的有序查找之外,数据库利用各种各样的快速定位技术,能够大大提高查询效率.特别是当数据量非常大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万倍. 例如,有 ...

  2. mysql修改索引语句_mysql——创建索引、修改索引、删除索引的命令语句

    查看表中已经存在 index:show index from table_name; 创建和删除索引索引的创建可以在CREATE TABLE语句中进行,也可以单独用CREATE INDEX或ALTER ...

  3. 查看mysql数据库 数据量大小和索引数据大小以及行数的方法

    查看mysql数据库 数据量大小和索引数据大小以及行数的方法 查看一个数据中所有表的相关信息: (1)可以在命令下使用show table status \G命令查看: (2)如果想知道MySQL数据 ...

  4. mysql如何创建简单索引_mysql 如何创建索引呢,这个其实很简单

    mysql 如何创建索引? mysql 如何创建索引呢,这个其实很简单 create index或者为己有字段增加索引 ALTER TABLE `table_name` ADD UNIQUE (`co ...

  5. 【Robo3T】为mongodb数据库中的表创建索引的步骤

    [Robo3T]为mongodb数据库中的表创建索引的步骤 MongoDB 索引 索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条 ...

  6. MySQL索引(什么是索引、如何创建索引、什么时候用索引、索引的作用)

    1什么是索引? 简单来讲就是排好序的快速查找数据结构. 2索引的优势劣势 3索引分类和创建索引的命令 4 BTree索引检索原理 5 那些情况适合索引 6 哪些情况不适合创建索引 下图是关于第三种情况 ...

  7. python如何删除mysql数据库_python删除数据mysql数据库连接

    Python学习之旅:访问MySQL数据库 Python学习之旅:访问MySQL数据库 MySQL是Web世界中使用最广泛的数据库服务器.为服务器端设计的数据库,能承受高并发访问. python如何使 ...

  8. oracle查询表唯一索引,oracle查询索引(oracle查看表索引)

    oracle查询索引(oracle查看表索引) 2020-07-24 11:01:26 共10个回答 选中表右键View然后查看index 通过PL/SQL可以直接查看某表是否建索引,通过SQL查询s ...

  9. lucene全文搜索之三:生成索引字段,创建索引文档(给索引字段加权)基于lucene5.5.3...

    前言:上一章中我们已经实现了索引器的创建,但是我们没有索引文档,本章将会讲解如何生成字段.创建索引文档,给字段加权以及保存文档到索引器目录 luncene5.5.3集合jar包下载地址:http:// ...

  10. 在 MySQL 数据库中删除重复记录的步骤

    在 MySQL 数据库中删除重复记录的步骤 当我们在处理数据库中的数据时,有时候会出现重复记录的情况,这些重复记录会影响数据的正确性,需要将其删除.下面是在 MySQL 数据库中删除重复记录的步骤: ...

最新文章

  1. php怎么删除所有文件夹,用php删除所有文件,文件夹及其子文件夹
  2. node2vec文献出处_详解Node2vec以及优缺点
  3. Hibernate模糊查询
  4. 对象引用 String引用 基本类型引用 差别
  5. 点云平面提取_基于LiDAR点云数据滤波方法
  6. adb 静默安装_怎么实现Android APP静默安装
  7. ShardingSphere(八) 分库分表的多种分片策略
  8. docker 安装镜像失败_docker(mips 64)安装中文字符集失败
  9. 混合线路接入时,360、QQ管家等测速显示电信IP或任意线路的IP
  10. HDU1598 find the most comfortable road【枚举+并查集+最大生成树】
  11. Django笔记 —— 表单(form)
  12. linux卸载rpm安装的golang,linux下go安装/卸载重装-Go语言中文社区
  13. 录制计算机课,如何录制直播网课?教你在电脑上如何录屏!
  14. idea git push 码云: Remote: [31mYou do not have permission to push to the repository via HTTPS
  15. php免安装配置方法,mysql免安装版配置步骤详解
  16. Element Plus的分页组件el-pagination显示英文
  17. 如何更改域计算机用户名和密码错误,win7加入域失败:未知的用户名或密码错误 | 绿萝...
  18. 探索设计模式之六——单例模式
  19. 十年Android程序员图解:用图帮你了解https的原理
  20. ES6读书笔记(下)

热门文章

  1. codeforces/contest/1624 div3题解ABCD
  2. 办公必备工作日志软件推荐
  3. 图片格式怎么转换?JPG、PNG、BMP等格式一键转换,这三个工具收好
  4. linux实验六磁盘综合管理
  5. 安全轻量化股票看盘盯盘软件需要实现的功能和基本要求是什么?
  6. UE4中使用UnrealPak.exe创建Pak文件
  7. 淘宝API调用说明 监控商品上下架 批量获得淘宝商品上下架时间
  8. android sdk库 离线安装,android sdk 离线安装
  9. 手机支付暗战升级 安全风险尚待解决
  10. 深度学习饱受争议的局部响应归一化(LRN)详解