索引是一种特殊的数据库结构,可用来快速查询数据库表中的特定记录。MySQL中,所有的数据类型都可以被索引。MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。

1、索引简介

索引是创建在表上的,是对DB表中一列或多列的值进行排序的一种结构。 
不同的存储引擎定义了每个表的最大索引数和最大索引长度。所有存储引擎对每个表至少支持16个索引,总索引长度至少为256字节。 
索引有两种存储类型,包括B型树索引和哈希索引。InnoDB和MyISAM支持BTREE索引,MEMORY支持HASH索引和BTREE索引,并默认为前者。 
索引也有缺点:创建和维护需要耗费时间,且耗费时间随着数据量的增加而增加;占用物理空间;增加、删除和修改数据时,要动态的维护索引,造成数据的维护速度降低。 
特别地,索引可以提高查询速度但是会影响插入记录的速度。因为,向有索引的表中插入记录时,系统会按照所有进行排序在进行插入。因此,在插入大量记录时,最好先删除删除表中的索引,然后插入数据,最后再创建索引。

1.1 索引的分类

(1) 普通索引 
普通索引在创建时,不附加任何约束条件。普通索引可以创建在任何数据类型中,其值是否唯一和非空由字段本身的完整性约束条件决定。 
(2) 唯一性索引 
使用UNIQUE参数可以设置索引为唯一性索引。即对于表A中的字段a中创建唯一性索引,那么字段a的值必须是唯一的。 
通过唯一性索引,可以更快速地确定某条记录。 
主键就是一种特殊唯一性索引。 
(3)全文索引 
使用FULLTEXT参数可以设置索引为全文索引。全文索引只能创建在CHAR、VARCHAR或TEXT类型的字段上。 
查询数据量较大的字符串类型的字段时,使用全文索引可以提高查询速度。 
注意只有MyISAM存储引擎支持全文索引。 
默认情况下,全文索引的搜索执行方式不区分大小写,但索引的列使用二进制排序后,可以执行区分大小写的全文索引。 
(4)单列索引 
单列索引即在表中的单个字段上创建索引。单列索引可以是普通索引、唯一性索引,也可以是全文索引。 
(5)多列索引 
注意只有查询条件中使用了这些字段中的第一个字段时,索引才会被使用。 
(6)空间索引 
使用SPATIAL参数可以设置索引为空间索引。空间索引只能建立在空间数据类型上,这样可以提高系统获取空间数据的效率。MySQL中的空间数据类型包括GEOMETRY和POINT、LINESTRING和POLYFON等。 
同样,目前只有MyISAM存储引擎支持空间索引,且索引的字段不能为空值。

1.2 索引的设计原则

(1)经常需要ORDER BY、GROUP BY、DISTINCT和UNION等操作的字段,排序会浪费很多时间,有必要为这些字段建立索引。 
(2)如果某个字段经常用来做查询条件,为其建立索引,可以提高整个表的查询速度。 
(3)一方面,索引会占用磁盘空间,另一方面,修改表时,对索引的重构和更新很麻烦,有必要限制索引的数目。 
(4)如果索引的值很长,也会影响查询的速度,因此,尽量使用数据量少的索引。 
(5)当索引字段的值很长时,最好使用值的前缀来索引。 
(6)当表中的数据被大量更新,或者数据的使用方式被改变后,原有的一些索引可能不再需要,此时有必要将其删除,减少索引对更新操作的影响。

2、创建索引

创建索引指在某个表的一列或多列上建立以个索引,以提高对表的访问速度。具体有以下三种方式

2.1 创建表的时候创建索引


其中,参数INDEX和KEY用来指定字段为索引的,两者选一即可,作用一样;别名用于给创建的索引取新名字;属性1即指定索引对应字段的名称,显然该字段必须是前面已定义好的字段;长度指索引的长度,只有字符串类型才可以使用;ASC和DESC分别表示升序排列和降序排列。

2.2 在已经存在的表上创建索引

 
其中,参数索引名即给创建的索引取的新名字。

2.3 用ALTER TABLE语句来创建索引

在已经存在的表上,可以用ALTER TABLE语句来创建索引 

上面这个提供了好多选项,只是一个总的模板,具体的要看实际情况添加不同的选项,

例:在 four 这个表中给  姓名  这个列添加普通索引,索引的名称叫  qwe:

1.添加PRIMARY KEY(主键索引) 
mysql>alter table four add primary key(姓名);
2.添加UNIQUE(唯一索引) 
mysql>alter table four add unique (姓名);
3.添加INDEX(普通索引) 
mysql>alter table four add index qwe (姓名); 
4.添加FULLTEXT(全文索引) 
mysql>alter table four add fulltext (姓名);
5.添加多列索引 
mysql>alter table four add index qwe ( 姓名,学号 );

3、删除索引

具体语言为 

例:要删除索引的话:

drop index qwe on four;

MySQL 入门(六)—— 索引相关推荐

  1. MySQL入门 (六) : 字元集与资料库

    1 Character Set与Collation 任何资讯技术在处理资料的时候,如果只是单纯的数值和运算,那就不会有太复杂的问题:如果处理的资料是文字的话,就会面临世界上各种不同语言的问题. 以资料 ...

  2. MySQL基础(六)-索引(index)详解

    目录 一.什么是索引? 二.索引的实现原理 三.在MySQL中,主键.unique字段上会自动添加索引. 四.索引的创建与删除 创建索引: 删除索引: 五.查看SQL语句是否使用了索引 六.索引的失效 ...

  3. MySQL入门之索引

    ---------------------------------------------------------------------------------------------------- ...

  4. MySQL入门 (七) : 储存引擎与资料型态

    1 表格与储存引擎 表格(table)是资料库中用来储存纪录的基本单位,在建立一个新的资料库以后,你必须为这个资料库建立一些储存资料的表格: 每一个资料库都会使用一个资料夹,这些资料库资料夹用来储存所 ...

  5. MySQL入门 (五) : CRUD 与资料维护

    1 取得表格资讯 1.1 DESCRIBE指令 「DESCRIBE」是MySQL资料库提供的指令,它只能在MySQL资料库中使用,这个指令可以取得某个表格的结构资讯,它的语法是这样的: 你在MySQL ...

  6. MySQL入门 (九) : 子查询 Subquery

    1 一个叙述中的查询叙述 子查询(subquery)是一种很常见的应用,不论是查询.新增.修改或删除都有可能出现. 子查询是一个放在左右刮号中的「SELECT」叙述,而这个查询叙述会放在另一个SQL叙 ...

  7. MySQL入门之大纲

    本节是讲解MySQL的入门教程,此教程是去年2016年做的,在此整理好,发布到了CSDN上: 此教程简单为MySQL入门教程.下面是涉及的内容: MySQL入门之数据库介绍及MySQL介绍 http: ...

  8. mysql六:索引原理与慢查询优化

    一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句 ...

  9. mysql建立学号与课程编号的索引_数据库mysql 四约束 三范式 六索引

    mysql 四约束 三范式 六索引 1.MySQL 约束 1.约束的作用 分类 表列的primary key主键,unique唯一键,not null非空等修饰符常常被称作约束(constraint) ...

  10. mysql实验五索引和数据完整性_实验六 索引和数据完整性约束

    实验六索引和数据完整性约束 一.实验内容: 1. 索引的创建 2. 数据完整性约束的创建 二.实验项目:员工管理数据库 用于企业管理的员工管理数据库,数据库名为YGGL中,YGGL数据库中包括三个表: ...

最新文章

  1. 华大基因回复深交所:“14万中国人基因大数据”项目与外方机构无关
  2. clevo风扇调速软件_YVP变频调速电机
  3. linux mongodb开机启动脚本,Linux下设置MongoDB开机自启动
  4. mysql 避免使用临时表_从日期范围中选择时防止MySQL使用临时表
  5. [学习笔记]matlab
  6. 这是Blazor上传文件的最佳方式吗?
  7. OC extern和变量
  8. 第十八节:跨域请求的解决方案和WebApi特有的处理方式
  9. LeetCode 1732. 找到最高海拔
  10. linux下忘记mysql root密码解决办法
  11. metasploit-***测试工具
  12. L1-001. Hello World-PAT团体程序设计天梯赛GPLT
  13. java下载文件名乱码的解决方法
  14. js转php,js代码转php代码可行吗?
  15. BZOJ2259[Oibh] 新型计算机
  16. 使用webgl(three.js)搭建一个3D智慧园区、3D建筑,3D消防模拟,web版3D,bim管理系统——第四课(炫酷版一)
  17. 针对iPhone X和iPhone XS这些傻叉手机安全距离的设定
  18. 万象优鲜生鲜配送系统源码
  19. web前端html5+css3学习笔记(3)——标签
  20. csdn头像怎么改不了解决方法

热门文章

  1. cad直线和圆弧倒角不相切_建议收藏:史上最全CAD快捷键大全
  2. java mongodb geo,通过GeoServer在MongoDB中提供地理空间数据
  3. 数组是逻辑结构还是存储结构_逻辑结构?存储结构?傻傻分不清……
  4. python清除数据库表命令_数据库----Python操作数据库
  5. linux work 账户管理,Homework Week-3 用户管理
  6. sev2008安装mysql_数据库教程
  7. delphi连接mysql不用添加DSN(mysql connector odbc 5.1版)
  8. 微信打开网页:如需浏览,请长按网址复制后使用浏览器访问怎么解决
  9. Jmeter 接口自动化执行报错 无法找到类或者类的方法
  10. Centos 搭建DNS服务器