700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > MySQL 索引的查询 创建与删除

MySQL 索引的查询 创建与删除

时间:2019-08-26 15:52:31

相关推荐

MySQL 索引的查询 创建与删除

索引类型

主键索引

唯一索引

普通索引(单列索引)

复合索引(组合索引)

全文索引

索引的查询

#查看:show indexes from `表名`;#或show keys from `表名`;

创建的语句(建表时)

CREATE TABLE table_name[col_name data type][unique|fulltext][index|key][index_name](col_name[length])[asc|desc]unique|fulltext为可选参数,分别表示唯一索引、全文索引index和key为同义词,两者作用相同,用来指定创建索引col_name为需要创建索引的字段列,该列必须从数据表中该定义的多个列中选择index_name指定索引的名称,为可选参数,如果不指定,默认col_name为索引值length为可选参数,表示索引的长度,只有字符串类型的字段才能指定索引长度asc或desc指定升序或降序的索引值存储

索引的创建

主键索引

主键索引是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。一般是在建表的时候同时创建主键索引:

(1)主键索引(创建表时添加)

CREATE TABLE `news` (`id` int(11) NOT NULL AUTO_INCREMENT ,`title` varchar(255) NOT NULL ,`content` varchar(255) NULL ,`time` varchar(20) NULL DEFAULT NULL ,PRIMARY KEY (`id`))

(2)主键索引(创建表后添加)

alter table tbl_name add primary key(col_name);CREATE TABLE `order` (`orderId` varchar(36) NOT NULL,`productId` varchar(36) NOT NULL ,`time` varchar(20) NULL DEFAULT NULL)alter table `order` add primary key(`orderId`);

唯一索引

唯一索引:唯一索引和普通索引类似,主要的区别在于,唯一索引限制列的值必须唯一,但允许存在空值(只允许存在一条空值)。

如果在已经有数据的表上添加唯一性索引的话:

如果添加索引的列的值存在两个或者两个以上的空值,则不能创建唯一性索引会失败。(一般在创建表的时候,要对自动设置唯一性索引,需要在字段上加上 not null)

如果添加索引的列的值存在两个或者两个以上的null值,还是可以创建唯一性索引,只是后面创建的数据不能再插入null值 ,并且严格意义上此列并不是唯一的,因为存在多个null值。

对于多个字段创建唯一索引规定列值的组合必须唯一。

比如:在order表创建orderId字段和 productId字段 的唯一性索引,那么这两列的组合值必须唯一!

“空值” 和”NULL”的概念:

1:空值是不占用空间的 .

2: MySQL中的NULL其实是占用空间的.

长度验证:注意空值的之间是没有空格的。

select length(’’),length(null),length(’ ‘);

±-----------±-------------±------------+

| length(’’) | length(null) | length(’ ') |

±-----------±-------------±------------+

| 0 | NULL | 1 |

±-----------±-------------±------------+

(1)创建唯一索引

# 创建单个索引CREATE UNIQUE INDEX index_name ON table_name(col_name);# 创建多个索引CREATE UNIQUE INDEX index_name on table_name(col_name,...);

(2)修改表结构

# 单个ALTER TABLE table_name ADD UNIQUE index index_name(col_name);# 多个ALTER TABLE table_name ADD UNIQUE index index_name(col_name,...);

(3)创建表的时候直接指定索引

CREATE TABLE `news` (`id` int(11) NOT NULL AUTO_INCREMENT ,`title` varchar(255) NOT NULL ,`content` varchar(255) NULL ,`time` varchar(20) NULL DEFAULT NULL ,PRIMARY KEY (`id`),UNIQUE index_name_unique(title))

普通索引(单列索引)

普通索引(单列索引):单列索引是最基本的索引,它没有任何限制。

(1)直接创建索引

CREATE INDEX index_name ON table_name(col_name);

(2)修改表结构的方式添加索引

ALTER TABLE table_name ADD INDEX index_name(col_name);

(3)创建表的时候同时创建索引

CREATE TABLE `news` (`id` int(11) NOT NULL AUTO_INCREMENT ,`title` varchar(255) NOT NULL ,`content` varchar(255) NULL ,`time` varchar(20) NULL DEFAULT NULL ,PRIMARY KEY (`id`),INDEX index_name (title(255)) // idex_name可省略)

复合索引(组合索引)

复合索引:复合索引是在多个字段上创建的索引。复合索引遵守“最左前缀”原则,即在查询条件中使用了复合索引的第一个字段,索引才会被使用。因此,在复合索引中索引列的顺序至关重要。

(1)创建一个复合索引

create index index_name on table_name(col_name1,col_name2,...);

(2)修改表结构的方式添加索引

alter table table_name add index index_name(col_name,col_name2,...);

全文索引

在一般情况下,模糊查询都是通过 like 的方式进行查询。但是,对于海量数据,这并不是一个好办法,在 like “value%” 可以使用索引,但是对于 like “%value%” 这样的方式,执行全表查询,这在数据量小的表,不存在性能问题,但是对于海量数据,全表扫描是非常可怕的事情,所以 like 进行模糊匹配性能很差。

这种情况下,需要考虑使用全文搜索的方式进行优化。全文搜索在 MySQL 中是一个 FULLTEXT 类型索引。FULLTEXT 索引在 MySQL 5.6 版本之后支持 InnoDB,而之前的版本只支持 MyISAM 表。

全文索引主要用来查找文本中的关键字,而不是直接与索引中的值相比较。fulltext索引跟其它索引大不相同,它更像是一个搜索引擎,而不是简单的where语句的参数匹配。fulltext索引配合match against操作使用,而不是一般的where语句加like。目前只有char、varchar,text 列上可以创建全文索引。

小技巧:

在数据量较大时候,先将数据放入一个没有全局索引的表中,然后再用CREATE index创建fulltext索引,要比先为一张表建立fulltext然后再将数据写入的速度快很多。

(1)创建表的适合添加全文索引

CREATE TABLE `news` (`id` int(11) NOT NULL AUTO_INCREMENT ,`title` varchar(255) NOT NULL ,`content` text NOT NULL ,`time` varchar(20) NULL DEFAULT NULL ,PRIMARY KEY (`id`),FULLTEXT (content))

(2)修改表结构添加全文索引

ALTER TABLE table_name ADD FULLTEXT index_fulltext_content(col_name)

(3)直接创建索引

CREATE FULLTEXT INDEX index_fulltext_content ON table_name(col_name)

注意: 默认 MySQL 不支持中文全文检索!

MySQL 全文搜索只是一个临时方案,对于全文搜索场景,更专业的做法是使用全文搜索引擎,例如 ElasticSearch 或 Solr。

索引的删除

#删除ALTER TABLE `表名` DROP INDEX 索引名;#或DROP INDEX 索引名 ON `表名`;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。