索引

索引是一种特殊的数据结构,用来提高数据库的查询效率,MySQL中,所有的数据类型都可以被索引

普通索引

所谓普通索引,就是在创建索引时,不添加任何限制条件(唯一,非空等限制),该类型可以创建在任何数据类型的字段上

可以如下定义

CREATE TABLE tablename(
propname1 type1,
propname2 type2,
……
propnamen type…n,
INDEX | KEY
[indexname] (propnamen [(length)] [ ASC | DESC ] ) );

其中,参数INDEX和KEY是用来指定字段为索引的,两者选择其中之一就可以了,作用是一样的;

参数indexname是索引名字,可省略;

参数propnamen是索引对应的字段的名称,该字段必须为前面定义好的字段;

参数length是可选参数,其指索引的长度,必须是字符串类型才可以使用;

参数ASC和DESC都是可选参数,ASC表示升序排列,DESC表示降序排列,如果不指定,则为升序。

mysql> create database school;   #创建数据库school  
mysql> use school;   #选择数据库school  
mysql> create table class(id int, name varchar(128) UNIQUE, teacher varchar(64), INDEX index_no(id DESC));       #创建表class, 并建立为id 字段索引  
mysql> show create table class;  #查看表结构 
mysql> insert into class values(1, '一班', 'Martin');  # 插入记录1 
mysql> insert into class values(1, '二班', 'Rock');   # 插入记录2 
mysql> select * from class where id > 0 ;   #根据id查询记录,结果将降序排列  

可以在已经定义的表上添加索引
方法一 执行create语句

CREATE INDEX indexname
ON tablename (propname [(length)] [ASC|DESC]);

参数INDEX是用来指定字段为索引,此处不能为KEY;

参数indexname是新创建的索引的名字;

参数tablename是指需要创建索引的表的名称,该表必须是已经存在的,如果不存在,需要先创建;

参数propname指定索引对应的字段的名称,该字段必须为前面定义好的字段;

参数length是可选参数,表示索引的长度,必须是字符串类型才可以使用;

参数ASC和DESC都是可选参数,ASC表示升序排列,DESC表示降序排列,默认升序。

方法二 执行alter语句

ALTER TABLE tablename
ADD INDEX | KEY indexname
(propname [(length)] [ASC|DESC]);

查看索引的执行情况
EXPLAIN 查询语句(select…)
查询的时候必须要用到才能看到
在这里插入图片描述
输出结果

key: 实际使用的索引。如果为NULL,则没有使用索引

possible_keys:显示可能应用在这张表中的索引,一个或多个。查询涉及到的字段上若存在索引,则该索引 将被列出,但不一定被查询实际使用

key_len: 表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度。此值越短越好!(计算机默认给的越短越好)

唯一索引

所谓唯一索引,就是在创建索引时,限制索引的字段必须时唯一的.

简单的说,就是该索引比普通索引更快

创建表时创建索引:
CREATE TABLE tablename(
propname1 type1,
……
propnamen type…n,
UNIQUE INDEX | KEY[indexname] (propnamen [(length)] [ ASC | DESC ] ) );

大概同上,只是加了一个UNIQUE INDEX

全文索引

全文索引主要对字符串类型建立基于分词的索引,主要基于CHAR,VARCHAR和TEXT的字段上,以便能够快速查询数据量较大的字符串类型的字段

创建表时创建索引:

CREATE TABLE tablename(
propname1 type1,
propname2 type2,
……
propnamen type…n,
FULLTEXT INDEX | KEY
[indexname] (propnamen [(length)] ) );

使用全文检索数据
select * from [表名] where match(列名) against(‘关键字’)

配置中文分词全文检索

配置文件my.ini(有的是其他的)(Windows 10默认路径: C:\ProgramData\MySQL\MySQL Server 8.0) 中增加如下配置项,同时重启MySQL80 服务:

76行下一行加上
ngram_token_size=2
在这里插入图片描述
让数据库使中文每俩个字作为一个词经行检索
配置好后重启

创建表时有稍微不同,在结尾加上 with parser ngram

mysql> create table class(id int, name varchar(128) UNIQUE, teacher varchar(64),comment varchar(1024),FULLTEXT INDEX index_des(comment) with parser   ngram);       #创建表class, 并建立为comment 字段为全文索引

多列索引

多列索引,是指在创建索引时所关联的字段不是一个字段,而是多个字段,虽然可以通过所关联的字段进行查询,但是只有查询条件中使用了所关联字段的第一个字段,多列索引才会被使用

创建表时定义索引
CREATE TABLE tablename(
propname1 type1,
……
propnamen type…n,
INDEX | KEY [indexname] (propname1 [(length)] [ ASC | DESC ],
Propname2 [(length)] [ ASC | DESC ],
… …
Propnamen [(length)] [ ASC | DESC ])
);
注意:和普通索引定义基本相同,不同之处就是增加了多个索引列。

追加多列索引

create index 索引名 on 表名(列名1,列名2…);
alter table 表名 add index 索引名(列1,列2);

隐藏索引

隐藏索引,顾名思义,让索引暂时不可见,不会被优化器使用。默认情况下索引是可见的。

隐藏索引可以用来测试索引的性能。验证索引的必要性时不需要删除索引,可以先将索引隐藏,如果优化器性能无影响就可以真正地删除索引。

ALTER TABLE tablename ALTER INDEX index_name INVISIBLE; #隐藏索引
ALTER TABLE tablename ALTER INDEX index_name VISIBLE; #取消隐藏

删除索引

drop index indexname on tablename;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值