码迷,mamicode.com
首页 > 数据库 > 详细

Mysql学习笔记(八)索引

时间:2015-05-09 13:16:11      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

原文:Mysql学习笔记(八)索引

PS:把昨天的学习内容补上...发一下昨天学的东西....五月三日。。。继续学习数据库...

学习内容:

索引....

索引的优点:

1.通过创建唯一索引,可以保证数据库每行数据的唯一性...

2.使查找的速度明显加快...

3.当使用分组和排序进行查询时,可以缩短时间...  

索引的缺点:

1.维护索引需要耗费数据库的资源...

2.索引需要占用磁盘空间...

3.对表进行增删改的时候,由于索引的存在,时间会有所增加...

索引的分类...

普通索引和唯一索引...

普通索引和唯一索引大致相同,都是属于b-tree结构....唯一不同点就是唯一索引的数据列可以为空,并且每一行的索引列的数据唯一...

单列索引和复合索引...

单列索引就是定义一个索引的参数是唯一一个,复合索引就是定义索引的时候包含的参数可以是多个...并且复合索引的查询必须要使用第一个字段,否则会产生不走索引的情况...原因是复合索引遵循最左前缀集合...

全文索引

全文索引就是定义索引的列上支持值的全文查找,允许在这个列上插入重复值和空值,全文索引可以在字符或者文本上进行定义...存储引擎为Myisam...

空间索引

空间索引必须在myisam表进行创建...是对空间的数据类型的字段建立的索引..空间数据类型有四种geometry,point,linestring,polygon...空间索引使用关键字spatial进行扩展...(说实话,我也不完全清楚空间索引到底能用在什么地方)...

创建索引的语句....

CREATE TABLE table_name[col_name data type]
[unique|fulltext|spatial][index|key][index_name](col_name[length])[asc|desc]

普通索引:

create table book
(
    bookid int not null,
    bookname varchar(255) not null,
    author varchar(255) not null,
    info varchar(255) not null,
    comment varchar(255),
    year_publication year not null,
    index(year_publication)
);
show create table book;//显示我们建立的表格的相应信息...
insert into book values(1,java,James Gosling,good,good,1982);

explain select * from book where year_publication=1982;

显示数据会有很多的属性..简单的介绍一下...

id:第几个..select_type:表示查询语句select的复杂程度..table:表格名称...type:访问类型..possible_key:显示索引...key:索引的个数...

key_len:显示使用索引的字节数...ref:显示哪个列被用于索引查找...rows:找到索引所要读取的行数...extra:表示不适合在列中显示,但是又很重要的额外信息...

唯一索引:

唯一索引列的索引值必须唯一,如果是复合索引,复合索引的列组合的值也必须唯一...

create table t1
(
   id int not null,
   name varchar(255) not null,
   age int not null,
   info varchar(255),
   unique index multidx(id,name)//复合唯一索引...
);

Insert into t1 values(1,we,20,misaya),(2,omg,21,gogoing);

使用explain查询语句...

explain select * from t1 where id=1 and name="we";//使用索引进行查找...
explain select * from t1 where name="we"//造成了不走索引。。未遵循匹配最左前缀原则...

全文索引...

Fulltext索引可以用于全文索引...只有myisam存储引擎支持全文索引..全文索引不支持过滤索引..

CREATE TABLE t4 (
  id INT NOT NULL,
  NAME CHAR(30) NOT NULL,
  age INT NOT NULL,
  info VARCHAR (255),
  FULLTEXT INDEX FulltxtIdx (info)
) ;
insert into t4 values(1,we,20,misaya);//插入数据

select * from t4 where match(info) against(misaya);//使用全文索引来查找数据..

空间索引:空间索引,用于地理空间类型...自己弄得也不是很明白...所以在这里不进行介绍,避免误人子弟...

在已有的表中去加入索引....

两种方式:

 

create table t1
(
   id int not null,
   first_name varchar(255) not null,
   last_name varchar(255) not null,
   dob date not null
);

//添加索引....

第一种方式....

alter table table_name add[unique][filltext][spatial]index】【key[index_name] (属性值) 【asc】【desc】.....

alter table t1 add index firstidx(first_name);//使first_name成为索引...

show index  from t1;//查看我们建立的索引...

第二种方式....

create [unique][filltext][saptial]indexon table_name(属性值)【asc】【desc//这个不支持key,。插入key会报错...
create index lastidx on t1(last_name);//使last_name为索引...

 

删除索引:

 

两种方式

1.alter table table_name drop index index_name;

alter table t1 drop index firstidx;//删除索引...

2.drop index index_name on table_name;

drop index lastidx on t1;//删除索引lastidx...

 

注意:anto_increment 约束字段的唯一索引是不允许被删除的....

无论是添加了索引还是删除了索引,我们都可以使用shou create table table_name来查看数据表建立的情况....

 

Mysql学习笔记(八)索引

标签:

原文地址:http://www.cnblogs.com/lonelyxmas/p/4489644.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!