四类索引:①普通索引;②主键索引;③唯一索引;④全文索引
一、添加索引
(1)添加普通索引
添加方法:先创建一个表,然后创建索引
语法:create index 索引名 on 表名(字段名);
例子:create table student(name varchar(10) not null,age int unsigned);
create index studentIndex on student(name);
(2)添加主键索引
添加方式一:直接在创建表的时候设置主键字段
例子:create table student(id int unsigned primary key auto_increment,name varchar(10) default '');
添加方式二:建立表后,修改表的字段,设置字段为主键
语法:alter table 表名 add primary key [字段的类型] (字段名);
例子:alter table student
add primary key(id);
注意:未添加索引前,dbms会从表的第一条数据一直往下找,即使已经找到一条符合要求的数据,dbms也会继续往下查找,因为
它不能保证下面是否还有符合要求的数据,所以其查找效率为n;
若添加索引后,dbms会先建立一个索引文件(该文件的位置在MysQL安装主目录\data\temp\下的.MIY文件),然后利用二
叉树的原理,根据索引把数据制作成二叉树的存储结构模式(索引文件里记录的是数据在存储设备中的物理地址,所以一
般建立后不要随意修改my.ini里的配置信息,若一旦修改,通常需要重新建立索引),然后通过查找二叉树的方法查找符
合要求的数据,所以其查找效率为log2(n)。
(3)添加唯一索引
添加方式一:创建表时设置标的某字段为唯一索引
例子:create table student(studentId int unsigned unique,studentName varchar(20) not null);
添加方式二:创建表后,再指定唯一索引
语法:create unique index 索引名 on 表名(字段名);
注意:unique字段可以为NULL,且可有多个重复的NULL,但是具体的内容如''则不能重复;
主键字段不能为NULL,且不能重复。
(4)添加文本索引
说明:全文索引主要针对文本的检索,比如文章
添加方法:先创建表(一定要指定表的存储引擎为MyISAM),然后添加全文索引
例子:create table articles(
id int unsigned auto_increment primary key,title varchar(50),body text
fulltext(title,body)
)engine=MyISAM charset utf8;
全文索引的用法:
a.错误用法:select * from articles where body like '搜索的文本内容'; 【此时不会使用到全文索引】
b.正确用法:select * from atticles where match(title,body) against('搜索的文本内容');
验证语句使用的索引类型方法:
注意:a.在MySQL中的fulltext索引只针对MyISAM引擎生效,对InnoDB和MEMORY/HEAP存储引擎不生效;
b.MySQL提供的fulltext只针对英文生效,而sphinx提供的coreseek技术可支持处理中文;
c.全文索引有一个停止字的概念,可参考MySQL的参考手册的默认全文停止字。
二、查询索引
方式一:deco 表名;
方式二:show index from 表名\G;
方式三:show keys from 表名\G;
三、删除索引
alter table 表名 drop index 索引名;
alter table 表名 drop primary key;
一、添加索引
(1)添加普通索引
添加方法:先创建一个表,然后创建索引
语法:create index 索引名 on 表名(字段名);
例子:create table student(name varchar(10) not null,age int unsigned);
create index studentIndex on student(name);
(2)添加主键索引
添加方式一:直接在创建表的时候设置主键字段
例子:create table student(id int unsigned primary key auto_increment,name varchar(10) default '');
添加方式二:建立表后,修改表的字段,设置字段为主键
语法:alter table 表名 add primary key [字段的类型] (字段名);
例子:alter table student
add primary key(id);
注意:未添加索引前,dbms会从表的第一条数据一直往下找,即使已经找到一条符合要求的数据,dbms也会继续往下查找,因为
它不能保证下面是否还有符合要求的数据,所以其查找效率为n;
若添加索引后,dbms会先建立一个索引文件(该文件的位置在MysQL安装主目录\data\temp\下的.MIY文件),然后利用二
叉树的原理,根据索引把数据制作成二叉树的存储结构模式(索引文件里记录的是数据在存储设备中的物理地址,所以一
般建立后不要随意修改my.ini里的配置信息,若一旦修改,通常需要重新建立索引),然后通过查找二叉树的方法查找符
合要求的数据,所以其查找效率为log2(n)。
(3)添加唯一索引
添加方式一:创建表时设置标的某字段为唯一索引
例子:create table student(studentId int unsigned unique,studentName varchar(20) not null);
添加方式二:创建表后,再指定唯一索引
语法:create unique index 索引名 on 表名(字段名);
注意:unique字段可以为NULL,且可有多个重复的NULL,但是具体的内容如''则不能重复;
主键字段不能为NULL,且不能重复。
(4)添加文本索引
说明:全文索引主要针对文本的检索,比如文章
添加方法:先创建表(一定要指定表的存储引擎为MyISAM),然后添加全文索引
例子:create table articles(
id int unsigned auto_increment primary key,title varchar(50),body text
fulltext(title,body)
)engine=MyISAM charset utf8;
全文索引的用法:
a.错误用法:select * from articles where body like '搜索的文本内容'; 【此时不会使用到全文索引】
b.正确用法:select * from atticles where match(title,body) against('搜索的文本内容');
验证语句使用的索引类型方法:
说明:执行“explain 查询语句\G”命令后,查看里面的possible_keys(可能使用到的索引)和key(本
语句使用到的索引)的值即可得到使用到的索引类型
例子:explain select * from atticles where match(title,body) against('搜索的文本内容')\G;注意:a.在MySQL中的fulltext索引只针对MyISAM引擎生效,对InnoDB和MEMORY/HEAP存储引擎不生效;
b.MySQL提供的fulltext只针对英文生效,而sphinx提供的coreseek技术可支持处理中文;
c.全文索引有一个停止字的概念,可参考MySQL的参考手册的默认全文停止字。
二、查询索引
方式一:deco 表名;
方式二:show index from 表名\G;
方式三:show keys from 表名\G;
三、删除索引
alter table 表名 drop index 索引名;
alter table 表名 drop primary key;