mysql数据库如何创建索引,删除索引

写在前面:要想了解索引的底层以及优化索引的底层还得学习不同搜索引擎下对于数据的处理,后续我会出一些相关的文章介绍,比如什么是B+tree,什么是聚簇索引什么是二级索引、联合索引等,以及不同搜索引擎下( MyISAM InnoDB)数据是如何相关联的,他们之间是通过单项链表还是双向链表来简历关系的。当然了下面的学习对这些东西虽然有关联但是现在目前不学习这些的话也没有太大的影响。在后续的文章中我会介绍的。
索引概述
MySQL 官方对索引的定义为: 索引( Index )是帮助 MySQL 高效获取数据的数据结构
索引的本质: 索引是数据结构。你可以简单理解为 排好序的快速查找数据结构 ,满足特定查找算法。 这些数据结构以某种方式指向数据, 这样就可以在这些数据结构的基础上实现 高级查找算法 
优点
(1)类似大学图书馆建书目索引,提高数据检索的效率,降低 数据库的IO成本 ,这也是创建索引最主
要的原因。 
(2)通过创建唯一索引,可以保证数据库表中每一行 数据的唯一性 。 
(3)在实现数据的参考完整性方面,可以 加速表和表之间的连接 。换句话说,对于有依赖关系的子表和父表联合查询时,可以提高查询速度。 
(4)在使用分组和排序子句进行数据查询时,可以显著 减少查询中分组和排序的时 间 ,降低了CPU的消耗。
缺点
增加索引也有许多不利的方面,主要表现在如下几个方面: 
(1)创建索引和维护索引要 耗费时间 ,并且随着数据量的增加,所耗费的时间也会增加。 
(2)索引需要占 磁盘空间 ,除了数据表占数据空间之外,每一个索引还要占一定的物理空间, 存储在磁盘上 ,如果有大量的索引,索引文件就可能比数据文件更快达到最大文件尺寸。 
(3)虽然索引大大提高了查询速度,同时却会 降低更新表的速度 。当对表中的数据进行增加、删除和修改的时候,索引也要动态地维护,这样就降低了数据的维护速度。
因此,选择使用索引时,需要综合考虑索引的优点和缺点。
索引的分类
MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。
从 功能逻辑 上说,索引主要有 4 种,分别是普通索引、唯一索引、主键索引、全文索引。
按照 物理实现方式 ,索引可以分为 2 种:聚簇索引和非聚簇索引。
按照 作用字段个数 进行划分,分成单列索引和联合索引。
小结:不同的存储引擎支持的索引类型也不一样 InnoDB 支持 B-tree Full-text 等索引,不支持 Hash 索引; MyISAM 支持 B-tree Full-text 等索引,不支持 Hash 索引; Memory 支持 B-tree Hash 等 索引,不支持 Full-text 索引; NDB 支持 Hash 索引,不支持 B-tree Full-text 等索引; Archive 不支 持 B-tree Hash Full-text 等索引;
创建索引
1. 创建表的时候创建索引
CREATE TABLE table_name [col_name data_type] [UNIQUE | FULLTEXT | SPATIAL] [INDEX | KEY] [index_name] (col_name [length]) [ASC | DESC]
UNIQUE FULLTEXT SPATIAL 为可选参数,分别表示唯一索引、全文索引和空间索引;
INDEX KEY 为同义词,两者的作用相同,用来指定创建索引;
index_name 指定索引的名称,为可选参数,如果不指定,那么 MySQL 默认 col_name 为索引名;
col_name 为需要创建索引的字段列,该列必须从数据表中定义的多个列中选择;
length 为可选参数,表示索引的长度,只有字符串类型的字段才能指定索引长度;
ASC DESC 指定升序或者降序的索引值存储。

 2. 在已经存在的表上创建索引

1. 使用 ALTER TABLE 语句创建索引 ALTER TABLE 语句创建索引的基本语法如下:
ALTER TABLE table_name ADD [UNIQUE | FULLTEXT | SPATIAL] [INDEX | KEY] [index_name] (col_name[length],...) [ASC | DESC]
2. 使用 CREATE INDEX 创建索引 CREATE INDEX 语句可以在已经存在的表上添加索引,在 MySQL 中, CREATE INDEX被映射到一个 ALTER TABLE 语句上,基本语法结构为:
CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name ON table_name (col_name[length],...) [ASC | DESC]
1.3 删除索引
1. 使用 ALTER TABLE 删除索引 ALTER TABLE 删除索引的基本语法格式如下:
ALTER TABLE table_name DROP INDEX index_name;
2. 使用 DROP INDEX 语句删除索引 DROP INDEX 删除索引的基本语法格式如下:
DROP INDEX index_name ON table_name;
提示 删除表中的列时,如果要删除的列为索引的组成部分,则该列也会从索引中删除。如果组成
索引的所有列都被删除,则整个索引将被删除。

 

你可能感兴趣的:(Java开发,mysql,mysql,数据库,database,服务器,sql)