目录
一、索引的分类
MySQL
的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。
的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。
- 从 功能逻辑 上说,索引主要有 4 种,分别是普通索引、唯一索引、主键索引、全文索引。
- 按照 物理实现方式 ,索引可以分为 2 种:聚簇索引和非聚簇索引。
- 按照 作用字段个数 进行划分,分成单列索引和联合索引。
1. 普通索引
普通索引,即在创建是不附加任何的限制条件,单纯是用于提高查询效率,可以创建在任何的数据类型中。另外的,其值是否唯一和非空还要看字段本身的完整性约束条件决定。
2. 唯一性索引
唯一性索引,使用UNIQUE参数设置索引为唯一性索引,即创建改索引时,其值必须唯一,但允许为空值。一张表中可以有多个唯一性索引。
3. 主键索引
主键索引可以认为是一种特殊的唯一性索引,因为其值不能为空且必须唯一,即相当于在唯一性索引上加了不为空的约束,也就是NOT NULL+UNIQUE,需要注意的是,一张表中只能有一个主键索引。另外,创建主键约束的同时会自动创建主键索引。
这是由主键索引的物理实现方式决定的,因为数据存储在文件中只能按照一种顺序进行存储。
4. 单列索引
在表中的单个字段上面创建索引。即只根据该字段进行索引,单列索引可以认为是普通索引,也可以认为是唯一性素养,还可以是全文索引,只要保证该索引值对应一个字段即可。一个表中可以含有多个单列索引。
5. 多列(组合、联合)索引
多列索引是在表的多个字段组合上创建的一个索引,该索引指向创建时的多个字段,可以通过这几个组合的第一个字段进行查询,当查询条件中使用了这些字段的一个时索引才会被使用。
6. 全文索引
全文索引(也称全文检索)是目前搜索引擎使用的一种关键技术。它能够利用 分词技术等多种算法智能分析出文本文字中关键词的频率和重要性,然后按照一定的算法规则智能地筛选出我们想要的搜索结果。全文索引非常适合大型数据集,对于小的数据集,它的用处比较小。
使用参数FULLTEXT可以设置索引为全文索引。在定义索引的列上支持值的全文查找,允许在这些索引列中插入重复值和空值。全文索引只能创建在CHAR、VARCHAR或TEXT类型及其系列类型的字段上,查询数据量较大的字符串类型的字段时,使用全文索引可以提高查询速度。例如,表 student 的字段 information 是 TEXT 类型该字段包含了很多文字信息。在字段information上建立全文索引后,可以提高查询字段information的速度。
全文索引典型的有两种类型
使用参数FULLTEXT可以设置索引为全文索引。在定义索引的列上支持值的全文查找,允许在这些索引列中插入重复值和空值。全文索引只能创建在CHAR、VARCHAR或TEXT类型及其系列类型的字段上,查询数据量较大的字符串类型的字段时,使用全文索引可以提高查询速度。例如,表 student 的字段 information 是 TEXT 类型该字段包含了很多文字信息。在字段information上建立全文索引后,可以提高查询字段information的速度。
全文索引典型的有两种类型
- 自然语言的全文索引
- 布尔全文索引
自然语言搜索引警将计算每一个文档对象和查询的相关度。这里,相关度是基于匹配的关键词的个数,以及关键词在文档中出现的次数。在整个索引中出现次数越少的词语,匹配时的相关度就越高。相反,非常常见的单词将不会被搜索,如果一个词语的在超过50%的记录中都出现了,那么自然语言的搜索将不会搜索这类词语。
7. 补充:空间索引
使用参数SPATIAL可以设置索引为空间索引。空间索引只能建立在空间数据类型(以Mysql为例,有GEOMETRY、POINT、LINESTRING和POLYGON等空间数据类型)上,这样可以提高系统获取空间数据的效率。目前只有MyISAM存储引擎支持空间检索,而且索引的字段不能为空值。对于初学者来说,这类索引很少会用到。
二、创建索引
1.隐式创建索引
加约束时创建索引,在声明有主键约束,唯一性约束,外键约束的字段上,会自动创建对应的约束。
2.显式创建索引
创建表的同时创建索引
语法如下:
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 指定升序或者降序的索引值存储。
① 创建普通索引
CREATE TABLE book(
book_id INT ,
book_name VARCHAR(100),
AUTHORS VARCHAR(100),
info VARCHAR(100) ,
COMMENT VARCHAR(100),
year_publication YEAR,
#声明索引
INDEX idx_bname(book_name)
);
通过命令查看索引
方式一:
#选中数据库
USE dbtest;
#查看索引
SHOW CREATE DAtABASE book;
查看结果如下:
方式二:
SHOW INDEX FROM book;
查看结果如下:
② 创建唯一性索引
声明有唯一索引的字段在添加数据时要保证唯一性,但可添加null值
#创建唯一性索引
CREATE TABLE book1(
book_id INT ,
book_name VARCHAR(100),
AUTHORS VARCHAR(100),
info VARCHAR(100) ,
COMMENT VARCHAR(100),
year_publication YEAR,
#声明索引
UNIQUE INDEX uk_idx_cmt(book_name)
);
③ 创建主键索引
通过定义主键约束的方式创建主键索引
#创建主键索引
CREATE TABLE book2(
book_id INT PRIMARY KEY,
book_name VARCHAR(100),
AUTHORS VARCHAR(100),
info VARCHAR(100) ,
COMMENT VARCHAR(100),
year_publication YEAR
);
④创建单列索引
#创建单例索引
CREATE TABLE book1(
book_id INT ,
book_name VARCHAR(100),
AUTHORS VARCHAR(100),
info VARCHAR(100) ,
COMMENT VARCHAR(100),
year_publication YEAR,
#声明索引
INDEX single_idx_name(book_name)
);
⑤创建组合索引
#创建组合索引
CREATE TABLE book1(
book_id INT ,
book_name VARCHAR(100),
AUTHORS VARCHAR(100),
info VARCHAR(100) ,
COMMENT VARCHAR(100),
year_publication YEAR,
#声明索引
INDEX mul_bid_bname_if(book_id, book_name, info)
);
⑥创建全文索引
举例一、创建表book1
,在表中的
info
字段上建立全文索引,
SQL
语句如下:
,在表中的
info
字段上建立全文索引,
SQL
语句如下:
#创建全文索引
CREATE TABLE book1(
book_id INT ,
book_name VARCHAR(100),
AUTHORS VARCHAR(100),
info VARCHAR(100) ,
COMMENT VARCHAR(100),
year_publication YEAR,
#声明索引
FULLTEXT INDEX ft_idx_info(info)
);
举例二、创建了一个给book_name和book_id字段添加全文索引的表。
#创建全文索引
CREATE TABLE book1(
book_id INT ,
book_name VARCHAR(100),
AUTHORS VARCHAR(100),
info VARCHAR(100) ,
COMMENT VARCHAR(100),
year_publication YEAR,
#声明索引
FULLTEXT INDEX (book_id, book_name)
);
⑦创建空间索引
空间索引创建中,要求空间类型的字段必须为
非空
。
非空
。
CREATE TABLE test5(
geo GEOMETRY NOT NULL,
SPATIAL INDEX spa_idx_geo(geo)
);
在已创建的表上添加索引
可以使用
ALTER TABLE
语句或者
CREATE INDEX语句在已经存在的表中创建索引。
ALTER TABLE
语句或者
CREATE INDEX语句在已经存在的表中创建索引。
①ALTER TABLE … TO …
ALTER TABLE table_name ADD
[
UNIQUE
|
FULLTEXT
|
SPATIAL
] [
INDEX
|
KEY
][index_name] (col_name[length],…) [
ASC
|
DESC
]
②CREATE INDEX … ON …
CREATE
[
UNIQUE
|
FULLTEXT
|
SPATIAL
]
INDEX
index_nameON table_name
(col_name[length],…) [
ASC
|
DESC
]
三、删除索引
1 ALTER TABLE … DROP …
ALTER TABLE
删除索引的基本语法格式如下:
ALTER TABLE table_name DROP INDEX index_name;
2. DROP INDEX … on …
DROP INDEX
删除索引的基本语法格式如下:
删除索引的基本语法格式如下:
DROP INDEX index_name ON table_name;
提示:删除表中的列时,如果要删除的列为索引的组成部分,则该列也会从索引中删除。如果组成 索引的所有列都被删除,则整个索引将被删除。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/118516.html