第五课:MySQL 索引

一、索引

数据表查询操作主要的两种搜索方式:一种全表扫描、检索,另一种利用数据表上建立的索引进行扫描

MySQL主要的几种索引:

普通索引:最基本的索引类型。普通索引的索引列值可以取空值或重复值。常用的关键字是indexkey

唯一性索引:索引值不能重复必须是唯一的,但可以为空。关键字是unique

主键索引:一种唯一性索引,索引值唯一且不能为空。关键字primary key,每个表只能有一个主键

聚簇索引:聚簇索引的索引顺序就是数据存储的物理存储顺序。一个表只能有一个聚簇索引。目前,MySQL只用solidDB和InnoDB存储引擎支持聚簇索引

█全文索引:全文索引(fulltext)只能建立在数据类型为varchar或text的列上。全文索引只能在MyISAM存储引擎的表中创建

索引可以建立在单一列上,称为单列索引。也可以建立在多个列上,称为组合索引

单列索引:一个索引只包含原表中的一个列。一个表可以建立多个单列索引

组合索引:组合索引(复合索引或多列索引)指在一个表的多个列上建立一个索引。

二、查找数据表上所建立的索引

基本语法结构:

show {index | indexes | keys} {from | in} tb_name [{from | in} db_name];

该语句的功能是显示出表名为tb_name的表上所有定义的索引名及索引类型

系统返回的索引信息表中重点几项的含义:

table:索引所在表的名称

non_unqiue:索引是否为唯一索引。不是唯一索引返回1,是唯一索引返回0

key_name:索引的名称

column_name:建立索引的列名称

collation:说明索引的顺序(升序还是降序)。升序显示A,显示null表示无分类

三、创建索引

MySQL有三种创建索引的方法:一种在创建表的同时创建索引,另外两种是分别在已经创建的表中使用create index语句创建索引,或使用alter table语句添加索引

1、使用create table语句创建索引

create table tb_name [col_name data_type]

[constraint index_name] [unqiue] [index | key]

[index_name] (index_col_name [length]) [asc | desc]

tb_name:需要建立索引的表名

index_name:索引名称。一个表可以简历多个索引,每个索引名称必须唯一

unique:指定所创建的是唯一性索引

index_col_name:要创建索引的列名,通常考虑将where子句和join子句里出现的列作为索引列

length:使用列的前length个字符创建索引。

asc | desc:指定索引是升序还是降序排列,默认升序(ASC)

MySQL创建表时,被定义为主键或外键的数据列,系统会自动建立相应字段的索引

2、使用create index语句创建索引

create [unique] index index_name

on tb_name(col_name [(length)] [asc | desc],...);

普通索引是没有唯一性约束的索引,可以建立在任何数据类型的字段上

3、使用alter table语句创建索引

alter table tb_name

add [unique | fulltext] [index | key] [index_name]( col_name [(length)] [asc | desc],...);

使用alter table语句的add constraint子句能够添加主健或外键约束,系统自动地创建相应的索引

四、删除索引

1、使用drop index语句删除索引

基本语法格式:

drop index index_name on tb_name;

tb_name:索引所在的表名

index_name:需要删除的索引名称。

2、使用alter table语句删除索引

alter table tb_name drop index index_name;

删除建立在tb_name表上的名称为index_name的索引

使用alter table语句的drop constraint子句能够删除表中主健或外键约束,系统自动地删除相应的主键、外键索引

删除表中某一列,而该列是索引项,则该列也会从索引中被删除

若组成索引的所有列都被删除,则整个索引将被删除

五、索引的进一步说明

1、使用索引时的问题

索引大大加快了查询响应的速度,提高MySQL的检索性能,但过多的使用索引会影响系统的性能:

降低了更新表中数据的速度

增加了存储空间

2、使用索引的建议

使用索引有利于提高数据查询效率,但会影响数据更新的速度。在插入、修改、删除操作较多的数据表避免过多地建立索引

数据量较小的表最好不要建立索引

使用索引是,严格遵循最左前缀法则,即先按照第一列进行排序,当第一列的值相同时对第二列进行排序,以此类推

在查询表达式中经常使用、有较多不同值的字段上建立索引

where子句中尽量避免将索引列作为表达式的一部分

为提高索引的效率,若char或varchar列的字符数较多时,可视具体情况选取字段前N个字符进行检索(即对索引列的前缀建立索引,可以节约存储空间)

陈双义博客

打赏 支付宝打赏 微信打赏
本文标题:第五课:MySQL 索引
本文链接:https://www.chenshuangyi.com/post/557.html
作者授权:除特别说明外,本文由 陈双义 原创编译并授权 陈双义博客 - 互联网Power 刊载发布。
版权声明:本文使用「署名-非商业性使用-相同方式共享」创作共享协议,转载或使用请遵守署名协议。

为您推荐

干货 | 软件性能测试基本测试概念

干货 | 软件性能测试基本测试概念

一、性能测试的目的1、 评估当前系统2、 寻找瓶颈3、 预测未来性能二、性能测试的前提:接...

  第十二课:MySQL 数据库的应用编程

第十二课:MySQL 数据库的应用编程

一、使用PHP进行MySQL数据库应用编程1、建立与MySQL数据库服务器的连接1.1、使用函数mysql_connec...

2019-03-21 标签:MySQL数据库软件测试
第十一课:MySQL 数据库备份与恢复

第十一课:MySQL 数据库备份与恢复

一、MySQL数据库备份与恢复1、使用SQL语句备份和恢复表数据1.1、select into...outfile语句导...

2019-03-21 标签:MySQL数据库软件测试
第十课:MySQL 访问控制与安全管理

第十课:MySQL 访问控制与安全管理

一、用户账户管理1、创建账户基本语法结构:create user user_specification[,us...

2019-03-20 标签:MySQL数据库软件测试
第九课:MySQL 存储过程和存储函数

第九课:MySQL 存储过程和存储函数

一、存储过程存储过程是一组为了完成某特定功能的SQL语句集。一个存储过程是一个可编程的函数,同时可以看做是在数据库编程中...

2019-03-18 标签:MySQL数据库软件测试
第八课:MySQL 事件

第八课:MySQL 事件

一、事件事件和触发器相似,都是在某些事情发生的时候启动,事件也叫作临时触发器事件基于特定时间周期触发来执行某些任务,而触...

2019-03-05 标签:MySQL数据库软件测试
第七课:MySQL 触发器

第七课:MySQL 触发器

一、触发器触发器是一个被指定关联到一个表的数据库对象。触发器用于保障数据库中数据的完整性,以及多个表之间数的一致性。触发...

2019-03-05 标签:MySQL数据库软件测试
第六课:MySQL 视图

第六课:MySQL 视图

一、视图视图是从一个或多个表或者视图中导出的表,也包含一系列带有名称的数据列和若干条数据行视图不同于数据库真实存在的表:...

2019-03-05 标签:MySQL数据库软件测试

发表评论

«   2019年7月   »
1234567
891011121314
15161718192021
22232425262728
293031
云服务器
轻量应用
站点信息
  • 文章总数:953
  • 页面总数:10
  • 分类总数:19
  • 标签总数:1542
  • 评论总数:153
  • 浏览总数:433035

当前非电脑浏览器正常宽度,请使用移动设备访问本站!