MySQL中的索引以及全文索引的使用

一、索引的介绍

索引可以提高MySQL的检索速度,对于MySQL的高效运行是很重要的。
MySQL中的索引类型有普通索引、唯一索引、主键索引、组合索引、全文索引。
1.普通索引
是最基本的索引,它没有任何限制,在创建索引时,可以指定索引长度,length为可选参数,表示索引的长度,只有字符串类型的字段才能指定索引长度,如果是BLOB和TEXT类型,必须指定length。创建索引时需要注意:如果指定单列索引长度,length必须小于这个字段所允许的最大字符个数。
查询索引:SHOW INDEX FROM 表名
(1)直接创建索引:
CREATE INDEX 索引名 ON 表名 (字段名(length))
(2)修改表添加索引
ALTER TABLE 表名 ADD INDEX 索引名 (字段名(length))
(3)创建表时指定索引列
CREATE TABLE emp(
id int primary key auto_increment,
name varchar(30),
address varchar(50),
index emp_index(name)
)

2.唯一索引
唯一索引与普通索引类似,不同的是索引列必须唯一,但允许有空值
(1)创建唯一索引
CREATE UNIQUE INDEX 索引名 ON 表名(字段名(length))
(2)修改表添加唯一索引
ALTER TABLE 表名 ADD UNIQUE 索引名 (字段名(length))
(3)创建表时指定唯一索引
CREATE TABLE 表名(
COLUMN TYPE,
PRIMARY KEY(id),
UNIQUE 索引名(字段名(length)
)

3.主键索引
主键索引时一种特殊的唯一的索引,一个表只能有一个主键,不允许有空值。一般是建表的时候同时创建主键索引(创建主键时默认有了主键索引)
(1)修改表添加主键索引
ALTER TABLE 表名 ADD PRIMARY KEY(列名)
(2)创建表时指定主键索引
CREATE TABLE 表名(
COLUMN TYPE,
PRIMARY KEY(column)
)
4.组合索引
组合索引是使用多个字段创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用(最左原则)
如:我们使用表中的name,age,address创建组合索引,那么想要组合索引生效,我们只能使用如下组合:
name/age/address
name/age
name/
如果使用address/age或者是age则索引不生效
(1)直接创建组合索引
CREATE INDEX 索引名 ON 表名(列名1,列名2,列名3)
(2)修改添加组合索引
ALTER TABLE 表名 ADD INDEX 索引名(列名1,列名2,列名3)
(3)创建表时创建组合索引
CREATE TABLE 表名(
COLUMN TYPE,
INDEX 索引名(列名1,列名2,列名3)
)
5.全文索引
全文索引主要用来查找文本中的关键字,而不是直接与索引中的值相比较,与其他索引大不相同,它更像是一个搜索引擎,而不是一种简单的where语句参数匹配,全文索引配合match against操作使用,而不是一般的where 语句加like。
全文索引可以从CHAR、VARCHAR、TEXT列中作为CREATE TABLE语句的一部分被创建,或是随后使用ALTER TABLE添加。不过切记对于大容量的数据表,生成全文索引时一个非常消耗时间和硬盘的做法。
(1)修改添加全文索引
alter table 表名 add fulltext 索引名(列名)
(2)创建表时创建全文索引
CREATE TABLE 表名(
COLUMN TYPE,
FULLTEXT 索引名 (列名)
)

删除索引

(1)DROP INDEX 索引名 ON 表名
(2)ALTER TABLE 表名 DROP INDEX 索引名

全文索引的使用

全文索引的使用与其他索引不同,在查询语句中需要使用match(column) against(‘content’)来检索数据
1.使用全文索引
SELECT 投影列 FROM 表名 WHERE MATCH(全文索引列名) AGAINST(‘搜索内容’)
示例:查询emp表中内容包含weini的数据
先创建全文索引:
alter table emp add fulltext emp_content_full(content)
检索数据:
select * from emp where match(content) against(‘weini’)
2.更换全文解析器
在创建全文索引时可以指定ngram解析器(该解析器可以解析中文)
ALTER TABLE 表名 ADD FULLTEXT 索引名(列名) WITH PARSER NGRAM
示例:
先创建全文索引:
alter table emp add fulltext emp_content_full(content) with parser ngram
查询emp表中内容包含’维尼’的数据
select * from emp where match(content) against(‘维尼’)

猜你喜欢

转载自blog.csdn.net/weixin_45684562/article/details/108500738