近朱者赤,近墨者黑。

【转】MySQL的索引总结

上一篇 / 下一篇  2016-07-16 22:00:32 / 个人分类:数据库学习

 
 

1、索引的分类

  首先,在MySQL中有四种索引:主键索引、唯一索引、普通索引和全文索引。主键索引即为建立在表主键上的索引,它跟主键一样,一定是非空、唯一且不重复的,一个主键可以指向多列(复合索引),所以主键索引可以建立在多列上。唯一索引,在创建表的时候创建,可以指定一列或几列为唯一索引,不能重复,一张表中可以有多个唯一索引,如果未指定非空,唯一索引可以为空,而且可以有多个。普通索引,在创建表的时候指定一列或几列为普通索引,一个普通索引也可以指向多列,普通索引的数据可以重复。因此,效率相对较低。
 
   全文索引见下面。

2、索引的创建

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);

主键索引的特点:
a)一个表只能有一个主键索引
b)一个主键可以指向多列(复合索引)
c)主键索引的效率最高,因此我们应该给id,一般id自增
d)主键索引的列不能重复也不能为null

2)唯一索引
创建表的时候创建唯一索引
create table aaa(id int, name varchar(64) not null default '', email varchar(64) not null default '' unique);

先建表再创建唯一索引
 create unique index uni_idx on aaa(email);
 alter table aaa add unique(email);

唯一索引的特点:
a)一张表中可以有多个唯一索引
b)一个唯一索引可以指向多列
c)唯一索引不能重复,但是如果你没指定not null,唯一索引可以为null,且可以有多个
d)什么时候使用唯一索引?当某列数据不会重复时使用
e)唯一索引效率仅次于主键索引,可优先考虑使用

3)普通索引
创建表时创建普通索引
create table aaa(id int, name varchar(64) not null default '', email varchar(64) not null default '' index);

建表后再创建普通索引
create index ind_n on aaa(name);
alter table aaa add index(name);

普通索引的特点:
a)一个表中可以有多个普通索引,一个普通索引也可以指向多列
b)普通索引列的数据可以重复
c)效率相对较低。

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('天气');

特点:
a)MySQL默认的全文索引,只能myisam存储引擎生效
b)MySQL默认的全文索引,只支持英文
c)停止词:对于特别普通的字母,不会建索引
d)匹配度:全文索引是按照一定的概率进行匹配的。

解决MySQL全文索引不支持中文的方法:
1)使用MySQL的一个中文检索插件 mysqlcft
2)可以使用专门的中文检索引擎sphinx 中文版(coreseek)

3.索引的查询
desc tablename
show keys from tablename
show index from tablename
show indexes from tablename

4.索引的修改: 先删除再添加

5.索引的删除
drop index  索引名 on tablename;
alter table tablename drop index 索引名;

6.使用索引的注意事项:
较为频繁的作为查询条件的字段应该创建索引
唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件
更新非常频繁的字段不适合创建索引
不会出现在Where子句的字段不该创建索引







TAG: 索引 MySQL

 

评分:0

我来说两句

Open Toolbar