零:文章概要

这篇文章,主要是和大家一起去了解 索引,然后一起使用CREATE INDEX语法给数据库中的表创建一个索引。

一:先拿电话薄做个类比

假如,一个电话薄里面包含了一个城市的所有人的姓名和电话号码。那么,想找到Bob Cat的电话号码,另外我们知道电话簿中名字是按照字母顺序排列的,所以首先要查找姓氏为Cat的页面,然后在这个页面下查找名字为Bob的电话号码。

那如果在电话薄中的名字没有按照字母排列,就需要去浏览所有的页,然后在里面查找每个姓名直到找到Bob Cat,这种是查找了所有的电话页,所以在时间上还是挺费时的。

那我们将电话簿与数据库表联系起来,如果有一个电话簿表然后要找到Bob Cat的电话号码,则可以执行以下查询:

SELECTphone_number
FROM phone_book
WHERE first_name = 'Bob' AND last_name = 'Cat';

这个写起来很容易,在数据量不大的时候查询速度很快,但数据库必须扫描表的所有行,直到找到该行为止,如果表有数百万行而没有索引时,则检索数据会耗费很多的时间。

二:索引的介绍

索引是一种数据结构,例如B-Tree,这种数据结构是需要额外的写入和存储为代价来提高表上数据检索的速度。一旦建立了索引后,数据库中查询优化器使用索引来快速定位数据,然后就无需扫描表中给定查询的每一行了。

其中。当使用主键或唯一键创建表时,MySQL会自动创建名为PRIMARY的特殊索引, 该索引称为聚簇索引。PRIMARY索引是比较特殊的,这个索引本身与数据一起存储在同一个表中。另外除PRIMARY索引之外的其他索引称为二级索引或非聚簇索引。

三:MySQL CREATE INDEX语句

通常,创建表的时候就能为表创建索引。 例如,以下语句创建一个新表,并创建了是由两列c2和c3组成的索引。

CREATE TABLE t(c1 INT PRIMARY KEY,c2 INT NOT NULL,c3 INT NOT NULL,c4 VARCHAR(10),INDEX (c2,c3)
);

但是要为列或一组列添加索引,可以使用CREATE INDEX语句,如下所示:

CREATE INDEX index_name ON table_name (column_list)

要为列创建索引,要指定索引名称,索引所属的表以及列。

例如,要为列c4添加新索引,请使用以下语句:

CREATE INDEX idx_c4 ON t(c4);

默认情况下,如果未指定索引类型,MySQL将创建B-Tree索引。 以下显示了基于表的存储引擎的允许索引类型:

四:MySQL CREATE INDEX 举例

以下语句查找职位为Sales Rep的员工:

SELECT employeeNumber, lastName, firstName
FROMemployees
WHEREjobTitle = 'Sales Rep';

这里数据返回了17行,表明17名员工的职位是销售代表。

那我们要查看MySQL如何在内部执行此查询,可以在SELECT语句的开头添加EXPLAIN子句,会得到下面的结果:

可以看到,MySQL必须扫描包含23行的整个表,以查找具有Sales Rep职位的员工。

现在,让我们使用CREATE INDEX语句为jobTitle列创建一个索引:

CREATE INDEX jobTitle ON employees(jobTitle);

并再次执行上述语句:

EXPLAIN SELECT employeeNumber, lastName, firstName
FROMemployees
WHEREjobTitle = 'Sales Rep';

这时候看到,MySQL只需要在键列中指示的jobTitle索引中找到17行而不扫描整个表。

如果要显示表的索引,可以使用下SHOW INDEXES语句,例如:

SHOW INDEXES FROM employees;

返回结果如下的索引

image.png

这篇文章中我们介绍了MySQL索引以及如何为表中的列添加索引,希望大家可根据文末提供的数据源来自己敲写代码

翻译参考:

1.Mysql创建索引

2.文章使用的数据源

创建二级索引_Mysql创建索引相关推荐

  1. mysql 创建唯一索引_Mysql创建索引

    零:文章概要 这篇文章,主要是和大家一起去了解 索引,然后一起使用CREATE INDEX语法给数据库中的表创建一个索引. 一:先拿电话薄做个类比 假如,一个电话薄里面包含了一个城市的所有人的姓名和电 ...

  2. mysql 创建覆盖索引_MySql覆盖索引

    mysql的innodb引擎通过搜索树方式实现索引,索引类型分为主键索引和二级索引(非主键索引),主键索引树中,叶子结点保存着主键即对应行的全部数据:而二级索引树中,叶子结点保存着索引值和主键值,当使 ...

  3. mysql 创建覆盖索引_Mysql覆盖索引 covering index 或者 index coverage

    组合索引 提到组合索引,大家都知道"最左前缀"原则.例如,创建索引 idx_name_age (name,age) ,通常情况下,where age=50 或者 where age ...

  4. mysql添加临时索引_mysql创建索引/删除索引操作

    -- 1.ALTER 创建索引 -- table_name表名,column_list列名,index_name索引名 -- 创建index索引 ALTER TABLE table_name ADD ...

  5. mysql repair 索引_mysql 创建索引、重建索引、查询索引、删除索引 转自:http://www.phpernote.com/mysql/942.html...

    本篇文章主要是对MySQL索引操作方法做了一下总结,包括创建索引.重建索引.查询索引.删除索引的操作.以下所列示例中中 `table_name` 表示数据表名,`index_name` 表示索引名,c ...

  6. mysql创建唯一索引_mysql创建唯一索引

    资料来源:http://www.cnblogs.com/aquilahkj/archive/2011/11/07/2240310.html 查看索引  show index from 数据库表名 al ...

  7. mysql 创建唯一索引_Mysql普通索引和唯一索引的选择分析

    假设一个用户管理系统,每个人注册都有一个唯一的手机号,而且业务代码已经保证了不会写入两个重复的手机号.如果用户管理系统需要按照手机号查姓名,就会执行类似这样的 SQL 语句: select name ...

  8. mysql重建索引_mysql创建、删除、重建、删除索引的操作命令的一些总结

    创建索引 索引的创建可以在create table语句中进行,也可以在表创建完成后单独的使用create index或者alter table来给表增加索引.一下语句分别是如何创建主键的索引(prim ...

  9. mysql物理删除索引_mysql创建索引,mysql索引优化,mysql索引创建删除

    mysql创建索引,mysql索引优化,mysql索引创建删除 ================================ ©Copyright 蕃薯耀 2020-11-23 http://fa ...

最新文章

  1. Express 搭建web服务器
  2. 政府、学校、企业都需要的轻量级数据填报方案
  3. Android C/C++ 开发
  4. mybatis一级,二级缓存。缓存带来的脏读问题
  5. Springboot 中的header, cookie, session
  6. SWOT分析》思维导图,帮助你做好企业优势劣势分析图
  7. Matlab音频信号的基本处理与分析
  8. 验证集与测试集的区别
  9. 关于修改文件拒绝访问的问题
  10. html文本如何逐渐淡入,CSS如何实现文字淡入效果
  11. DirectX是什么,出现游戏打不开问题解决方案
  12. Revit出图问题:打印机中新建纸张尺寸?批量导出图纸?
  13. 发送手机短信验证码-后端、前端(验证码倒计时)
  14. 如何将pdf转换成jpg图片的格式
  15. MySQL中show命令用法大全
  16. ai论文调研——PAMI Popular Articles (December 2015)
  17. WarGame bandit
  18. sp/计算机产品与流通,计算机产品与流通杂志
  19. laravel-excel使用3(老猫包子店的故事)
  20. zabbix 监控 db2_二十多款开源的服务器监控软件,你用过几款? – 阿汤博客

热门文章

  1. 使用Maven实施自定义JSF 2.0组件
  2. Java 8最新消息
  3. 使用Cloud SQL的Google App Engine全文搜索
  4. 使用Spring配置LogBack日志记录
  5. 6 日期字符串转日期_Java日期时间API系列6-----Jdk8中java.time包中的新的日期时间API类...
  6. xrd精修教程_XRD精修系列干货 | 带你领略晶体之美
  7. C++ 11 深度学习(三)范围for、new内存动态分配、nullptr
  8. sublime快捷键代码对齐_Python配置sublime运行环境
  9. C语言520心形表白,初学者福利!!
  10. 【lua学习】7.环境