一 索引
MySQL 索引的建立对于 MySQL 的高效运行是很重要的,索引可以大大提高 MySQL
的检索速度。
二 MySQL 中的索引类型
• 普通索引
• 唯一索引
• 主键索引
• 组合索引
• 全文索引
三 普通索引
是最基本的索引,它没有任何限制。
在创建索引时,可以指定索引长度。length 为可选参数,表示索引的长度,只有字符串
类型的字段才能指定索引长度,如果是 BLOB 和 TEXT 类型,必须指定 length。
创建索引时需要注意:
如果指定单列索引长度,length 必须小于这个字段所允许的最大字符个数。
查询索引:SHOW INDEX FROM table_name
3.1直接创建索引
CREATE INDEX index_name ON table(column(length))
3.2修改表添加索引
ALTER TABLE table_name ADD INDEX index_name (column(length))
3.3创建表时指定索引列
CREATE TABLE table
(
COLUMN TYPE ,
PRIMARY KEY (id
),
INDEX index_name (column(length))
)
3.4删除索引
DROP INDEX index_name ON table
四 唯一索引
唯一索引与普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。它有以
下几种创建方式:
4.1创建唯一索引
CREATE UNIQUE INDEX indexName ON table(column(length))
4.2修改表添加唯一索引
ALTER TABLE table_name ADD UNIQUE indexName (column(length))
4.3创建表时指定唯一索引
CREATE TABLE table
(
COLUMN TYPE ,
PRIMARY KEY (id
),
UNIQUE index_name (column(length))
)
五 主键索引
主键索引是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。一般是在建
表的时候同时创建主键索引。
5.1修改表添加主键索引
ALTER TABLE 表名 ADD PRIMARY KEY(列名)
5.2创建表时指定主键索引
CREATE TABLE table
(
COLUMN TYPE ,
PRIMARY KEY(column)
)
六 组合索引
组合索引是指使用多个字段创建的索引,只有在查询条件中使用了创建索引时的第一个
字段,索引才会被使用(最左前缀原则)。
6.1最左前缀原则
就是最左优先。
如:我们使用表中的 name,address,salary 创建组合索引,那么想要组合索引生效,
我们只能使用如下组合:
name/address/salary
name/address
name/
如果使用 addrees/salary 或者是 salary 则索引不会生效。
6.2修改添加组合索引
ALTER TABLE table_name ADD INDEX index_name (column(length),column(length))
6.3创建表时创建组合索引
CREATE TABLE table
(
COLUMN TYPE ,
INDEX index_name (column(length),column(length))
)
七 全文索引
全文索引(FULLTEXT INDEX)主要用来查找文本中的关键字,而不是直接与索引中的值
相比较。FULLTEXT 索引跟其它索引大不相同,它更像是一个搜索引擎,而不是简单的 where
语句的参数匹配。FULLTEXT 索引配合 match against 操作使用,而不是一般的 where 语句
加 like。全文索引可以从 CHAR、VARCHAR 或 TEXT 列中作为 CREATE TABLE 语句的一部分
被创建,或是随后使用 ALTER TABLE 添加。不过切记对于大容量的数据表,生成全文索
引是一个非常消耗时间非常消耗硬盘空间的做法。
7.1修改添加全文索引
ALTER TABLE table_name ADD FULLTEXT index_content(content)
7.2创建表时创建全文索引
CREATE TABLE table
(
COLUMN TYPE ,
FULLTEXT index_name (column)
)
7.3删除全文索引
DROP INDEX index_name ON table
7.4使用全文索引
全 文 索 引 的 使 用 与 其 他 索 引 不 同 。 在 查 询 语 句 中 需 要 使 用 match(column)
against(‘content’) 来检索数据。
7.5全文解析器
全文索引中基本单位是”词”。分词,全文索引是以词为基础的,MySQL 默认的分词是
所有非字母和数字的特殊符号都是分词符。在检索数据时我们给定的检索条件也是词。
MySQL 中默认的全文解析器不支持中文分词。如果数据含有中文需要更换全文解析器
NGRAM。
7.6使用全文索引
SELECT 投影列 FROM 表名 WHERE MATCH(全文索引列名) AGAINST(‘搜索内容’)
7.7更换全文解析器
在创建全文索引时可以指定 ngram 解析器
ALTER TABLE table_name ADD FULLTEXT index_content(content) WITH PARSER
NGRAM
7.8使用全文索引(中文)