MySQL学习——索引

  索引可以大大提升MySQL的索引速度,下面将介绍MySQL中的不同种索引。

  • 普通索引
  • 唯一索引
  • 主键索引
  • 组合索引
  • 全文索引

1、普通索引

  普通索引是最基本的索引,创建时没有任何限制。在创建索引时可以指定索引长度。length为可选参数,表示索引长度(只有字符串类型的字段才能指定索引长度),如果是BLOB和TEXT类型必须要指定这个length

  创建索引时需要注意如果指定单列索引长度,length必须小于这个字段所允许的最大字符个数。

  查询某张表的索引采用:SHOW INDEX FROM 表名

 1.1、直接创建索引

语法格式:

CREATE INDEX 索引名 ON 表名(列名(length))

  这种方式创建索引需要保证该列已经存在了,其中length可以省略。

 1.2、修改表添加索引

语法格式:

ALTER TABLE 表名 ADD INDEX 索引名(列名(length)) 

 1.3、创建表时指定索引

语法格式:

CREATE TABLE 表名(
      ...,
      ...,
      INDEX 索引名(列名(length)) 
)

  在创建表的最后末尾加上INDEX...即可

 1.4、删除索引

语法结构:

DROP INDEX 索引名 ON 表名

2、唯一索引

  唯一索引与普通索引类似,不同的是:索引列的值必须是唯一的,但允许有空值。

 2.1、直接创建索引

语法结构:

CREATE UNIQUE INDEX 索引名 ON 表名(列名(length)) 

 2.2、修改表添加索引

ALTER TABLE 表名 ADD UNIQUE 索引名(列名(length)) 

 2.3、创建表时指定索引

语法格式:

CREATE TABLE 表名(
      ...,
      ...,
      UNIQUE 索引名(列名(length)) 
)

3、主键索引

  一种特殊的唯一索引,一个表只能由一个主键,不允许由空值,一般是建表时同时创建主键索引。一般是由数据库自动创建的,因此当我们个一张表分配了一个主键,那数据库就会帮我们自动创建这个主键索引。因此没有单独的创建主键索引的语句,而是创建主键的语法来代替

4、组合索引

  组合索引是指使用多个字段建立的索引(索引中包含了多个字段),只有在查询条件中使用了创建索引时的第一个字段时,索引才会被使用(最左前缀原则)。

最左原则:若我们使用表中的name,address,salary创建索引,我们只能使用以下条件组合时索引才会生效。

  • name,address,salary
  • name,address,
  • name

  若只是用address,salary作为条件,则不会触发索引。

 4.1、修改添加组合索引

语法结构:

ALTER TABLE 表名 ADD INDEX 索引名(列名1(length), 列名2(length)...) 

  其实可看出来组合索引的创建,其实就是普通索引创建时在括号内填写多个列。

5、全文索引(FULLTEXT INDEX)

  全文索引主要用来查找文本中的关键字,而不是直接与索引中的值相比较,FULLTEXT索引与其他索引不同,它更像时一个搜索引擎,而不是简单的where语句的参数匹配。FULLTEXT索引配合match against操作一起使用。全文索引并不是完全值的索引,一般是在某个字段数据过大才建立全文索引。

  可以在CHAR,VARCHAR或TEXT列建立全文索引。

 5.1、修改表添加索引

ALTER TABLE 表名 ADD FULLTEXT 索引名(列名) 

 5.2、创建表时指定索引

语法格式:

CREATE TABLE 表名(
      ...,
      ...,
      FULLTEXT 索引名(列名) 
)

  5.3、使用全文索引

  全文使用的索引需要在查询语句中使用 match(全文索引列名) against('搜索的内容') 来索引。

语法结构:

SELECT * FROM 表名
WHERE MATCH(全文索引列名) AGAINST('搜索的内容') 

  注意全文索引检索的基本单位是词,而不是字符,例如数据为“hello word”,我是用“hello”去匹配则是可以检索出该条数据,但是使用“he”去匹配则无法被检索出来。

  英文的分词是根据空格等非字符或数字来进行分词的。如果是对中文进行全文索引,则需要使用NGRAM这个解析器(在创建全文索引时在末尾增加WITH PARSER NGRAM即可)

 

posted @ 2022-09-20 17:08  Circle_Wang  阅读(75)  评论(0编辑  收藏  举报