MySQL 入门(六)—— 索引
索引是一种特殊的数据库结构,可用来快速查询数据库表中的特定记录。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 入门(六)—— 索引相关推荐
- MySQL入门 (六) : 字元集与资料库
1 Character Set与Collation 任何资讯技术在处理资料的时候,如果只是单纯的数值和运算,那就不会有太复杂的问题:如果处理的资料是文字的话,就会面临世界上各种不同语言的问题. 以资料 ...
- MySQL基础(六)-索引(index)详解
目录 一.什么是索引? 二.索引的实现原理 三.在MySQL中,主键.unique字段上会自动添加索引. 四.索引的创建与删除 创建索引: 删除索引: 五.查看SQL语句是否使用了索引 六.索引的失效 ...
- MySQL入门之索引
---------------------------------------------------------------------------------------------------- ...
- MySQL入门 (七) : 储存引擎与资料型态
1 表格与储存引擎 表格(table)是资料库中用来储存纪录的基本单位,在建立一个新的资料库以后,你必须为这个资料库建立一些储存资料的表格: 每一个资料库都会使用一个资料夹,这些资料库资料夹用来储存所 ...
- MySQL入门 (五) : CRUD 与资料维护
1 取得表格资讯 1.1 DESCRIBE指令 「DESCRIBE」是MySQL资料库提供的指令,它只能在MySQL资料库中使用,这个指令可以取得某个表格的结构资讯,它的语法是这样的: 你在MySQL ...
- MySQL入门 (九) : 子查询 Subquery
1 一个叙述中的查询叙述 子查询(subquery)是一种很常见的应用,不论是查询.新增.修改或删除都有可能出现. 子查询是一个放在左右刮号中的「SELECT」叙述,而这个查询叙述会放在另一个SQL叙 ...
- MySQL入门之大纲
本节是讲解MySQL的入门教程,此教程是去年2016年做的,在此整理好,发布到了CSDN上: 此教程简单为MySQL入门教程.下面是涉及的内容: MySQL入门之数据库介绍及MySQL介绍 http: ...
- mysql六:索引原理与慢查询优化
一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句 ...
- mysql建立学号与课程编号的索引_数据库mysql 四约束 三范式 六索引
mysql 四约束 三范式 六索引 1.MySQL 约束 1.约束的作用 分类 表列的primary key主键,unique唯一键,not null非空等修饰符常常被称作约束(constraint) ...
- mysql实验五索引和数据完整性_实验六 索引和数据完整性约束
实验六索引和数据完整性约束 一.实验内容: 1. 索引的创建 2. 数据完整性约束的创建 二.实验项目:员工管理数据库 用于企业管理的员工管理数据库,数据库名为YGGL中,YGGL数据库中包括三个表: ...
最新文章
- 华大基因回复深交所:“14万中国人基因大数据”项目与外方机构无关
- clevo风扇调速软件_YVP变频调速电机
- linux mongodb开机启动脚本,Linux下设置MongoDB开机自启动
- mysql 避免使用临时表_从日期范围中选择时防止MySQL使用临时表
- [学习笔记]matlab
- 这是Blazor上传文件的最佳方式吗?
- OC extern和变量
- 第十八节:跨域请求的解决方案和WebApi特有的处理方式
- LeetCode 1732. 找到最高海拔
- linux下忘记mysql root密码解决办法
- metasploit-***测试工具
- L1-001. Hello World-PAT团体程序设计天梯赛GPLT
- java下载文件名乱码的解决方法
- js转php,js代码转php代码可行吗?
- BZOJ2259[Oibh] 新型计算机
- 使用webgl(three.js)搭建一个3D智慧园区、3D建筑,3D消防模拟,web版3D,bim管理系统——第四课(炫酷版一)
- 针对iPhone X和iPhone XS这些傻叉手机安全距离的设定
- 万象优鲜生鲜配送系统源码
- web前端html5+css3学习笔记(3)——标签
- csdn头像怎么改不了解决方法
热门文章
- cad直线和圆弧倒角不相切_建议收藏:史上最全CAD快捷键大全
- java mongodb geo,通过GeoServer在MongoDB中提供地理空间数据
- 数组是逻辑结构还是存储结构_逻辑结构?存储结构?傻傻分不清……
- python清除数据库表命令_数据库----Python操作数据库
- linux work 账户管理,Homework Week-3 用户管理
- sev2008安装mysql_数据库教程
- delphi连接mysql不用添加DSN(mysql connector odbc 5.1版)
- 微信打开网页:如需浏览,请长按网址复制后使用浏览器访问怎么解决
- Jmeter 接口自动化执行报错 无法找到类或者类的方法
- Centos 搭建DNS服务器