1.1 索引的创建
1.1.1 主键索引的创建
创建表的时候创建主键索引
create table aaa(id int primary key,name varchar(64) not null default ”);
先建表再建主键索引
create table aaa(id int,name varchar(64) not null default ”);
alter table aaa add primary key(id);主键索引的特点
1) 一个表最多只能有一个主键
2) 一个主键可以指向多列(复合主键)
3) 主键索引的效率是最高的,因此我们应该给id一般id是自增的
4) 主键索引的列是不能重复也不能为null
1.1.2 唯一索引的创建
- 直接在创建表的时候,指定某列或某几列为唯一索引
mysql> create table aaa(id int,name varchar(64) not null default ”,email varchar(64) not null default ” unique);
建表后再创建唯一索引
1)mysql> create unique index uni_name on aaa (name);
2)mysql> alter table aaa add unique (email);唯一索引的特点
1)一张表中可以有多个唯一索引
2)唯一索引不能重复,但是如果你没有指定not null,唯一索引可以为null,而且可以有多个。
3)什么时候使用唯一索引,当某列数据不会重复时才能使用
4)唯一索引效率也很高,可以考虑优先使用
1.1.3 普通索引的创建
- 直接在创建表的时候,指定某列或某几列为普通索引
mysql> create table aaa(id int,name varchar(64) not null default ”,namevarchar(64) not null default ” index);
建表后再创建普通索引
1)mysql> create index ind_name on aaa (name);
2)mysql> alter table aaa add index(name);特点
1) 一张表中可以有多个普通索引,一个普通索引也可以指向多列
2)普通索引列的数据可以重复
3)效率相对而言低
1.1.4 全文索引的创建
概述:全文索引是针对对文章,汉字,英文的索引,可以快速检索到文章中的某个关键字
CREATE TABLE articles (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
title VARCHAR(200),
body TEXT,
FULLTEXT (title,body)
) engine myisam charset=utf8;
使用:select * from articles where match(body) against(‘天气’);
特点
1)Mysql默认的全文索引,只对myisam存储引擎生效
2)Mysql默认的全文索引,只支持英文
3)停止词:对于特别普通的字母,不会建索引
4)匹配度:全文索引是按照一定概率进行匹配的。
- 如何解决mysql的全文索引不支持中文的问题
1) 使用mysql的一个中文检索插件 mysqlcft
2) 可以使用专门的中文检索引擎 sphinx 中文版(coreseek)
1.2 索引的查询
desc表名
show keys from 表名\G
show index from 表名\G
show indexes from 表名\G
1.3 索引的修改
先删除载添加
1.4 索引的删除
DROP INDEX 索引名ON 表;
ALTERTABLE 表名DROP INDEX 索引名;
1.6 索引的注意事项
- 较为频繁的作为查询条件的字段应该创建索引
- 唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件
- 更新非常频繁的字段不适合创建索引
- 不会出现WHERE子句的字段不该创建索引