阅读背景:

索引创建以及优化_1

来源:互联网 
怎么去创建索引啊,我们先看第一种啊

1. 普通索引,所谓的普通索引是什么啊,就是index,比如像这种primary key,还有index,还有unique,这些都可以

把它划分到普通索引当中,他除了有普通索引以外,唯一索引,全文索引,还有一个聚合组合索引,4大索引,普通索引

就是index,既不是组件也不是惟一的,那普通索引怎么创建呢,其实是比较简单的,这是最基本的索引,他没有任何

限制,MYISAM中默认的B-TREE索引,也是我们大多数情况下要用到的索引,也就是我们建索引其实更多的就是建

index索引,我们来看他的语法格式是及其简单的,直接创建, 

create index [index_name] on [table_name](column(length)),

括号括起来是指索引的名字,我们一定要给索引起名字,不仅仅是普通索引,包括我们主键索引,唯一性索引,还有组合

索引,我们都应该有名字,有名字的好处是什么呢,你未来想删除索引的时候,他都是根据索引的名字去删的,明白这个意思吧

[table_name]是指在哪个表上创建索引,[column(length)]然后给哪个列创建索引,你看列里给了一个length,那么这个长度表示

什么含义呢,你在创建索引的时候,这个长度就是要把这个索引这个列里字段的值取多长放到索引里,如果不写length,那他就会

把这列里所有的数据等长度的塞到索引里,比如说,我现在有name这样的一个列,然后这个列里有什么值呢,然后我在给name创建

索引的时候,我再给name字段没有写length,它会把这条数据里的这一列的值全都加在数据里,能明白吗,那么所带来的问题

是什么呢索引他的存储空间肯定需要很大,但是实际上我们在找数据的时候,我要找abc的,abc和abab都是以a开头,那我可以

取3位,3位什么意思呢,只把其他的前3位放到索引里,那就可以通过前3位去区分abc和abab,所以索引来给定长度,所带来的

好处,这种索引叫短索引,是可以进一步提升索引检索的性能,如果没给length,把整个列都放到里面,这就叫长索引了,我们来

试一下,来创建一个最普通的索引,我们先创建一个表,当然你也可以通过命令来创建,id,类型int,然后来一个u_name,varchar,

长度20,允许为空,u_age,int类型,这样一个表就创建好了,这里又一个查看索引的命令,show index from [table_name],

那现在在我这个表里,有几个索引,只有一个,什么索引啦,不是普通索引,唯一性索引,主键吗,我们可以查一下,新建查询,

show index from users;下面会显示表的索引信息,table是users,Key_name就是PRIMARY,你没给他起名默认就是PRIMARY

作为他的名称,明白吗,然后注意看它是用什么来做他的索引的,Index_Type是BTREE类型的,这是主键索引比如我们这个name

会经常会在where语句后面作为查询条件,那我是不是可以给这个name加一个索引啊,是吧,但是你能给她加一个主键吗,

因为它未来的内容可能会有重复的,所以不能加主键索引,也不能加唯一性索引,就得加普通的index索引,那怎么创建呢,

有多种情况,首先来看第一个


1. 第一个直接创建,create index [索引名] on [表名](column(length));先用直接创建这种方式,这个名字尽量要和

可能的关键字避免开on后面是哪个表,这个表里给谁建索引啊,create index name_index on users(u_name);运行是不是

创建完了,我们是不是把整个列作为索引项了,我们再去show index from user;是不是多了一条数据,这Key_name是不是

name_index,往后看,column_name叫u_name,也是BTREE类型索引,这就创建完了,是不是很简单,我现在想删除掉索引怎么办,

也非常简单


2.删除索引,一种是直接删除法, drop 索引名 on [表名];还有一种是通过修改表的方式,直接删除法,drop index删除

一个索引,索引名字叫name_index,然后on users这个表,drop index name_index on users;

然后我们show index from users;没了吧,这就是删除index,刚才我们用的create index方式,还有一种方式是什么呢,

是对表修改来添加索引,我们修改表用什么命令来着,用alter,来看一下,他的语法结构也是比较简单的,

alter table修改表,然后表的名字,你要对哪个表进行修改,然后你要修改什么,ADD INDEX添加一个索引,

然后索引名称,和索引列,那么我们用这个命令再来做一个,添加索引,alter table users add index name_index(u_name);

然后对他做一个什么样的操作呢,add index添加索引,索引的名称叫什么呢,叫name_index,谁拥有这个名字呢,

执行也成功了吧,然后再show index from users;是不是一样有这个东西,是不是还是BTREE类型的,

我先把它删掉,drop index name_index on users;show index from users;没有了吧,为什么把它删了呢,

刚才我们直接创建和直接修改表创建,所创建的索引都是长索引,长索引是什么含义来的,会把这个列里面

所有的值完整的作为索引的一部分,那我们是不是可以建短索引,短索引什么含义呢,就是可以指定长度,

把这个值的指定长度加到索引里面,其他的不加,那怎么来建这个短索引呢,这个很简单,括号加长度,

比如是2,alter table users add index name_index(u_name(2));

这是什么,只取内容的前两个字符作为存储信息的信息列,好不好使呢,我们运行,是不是一样可以

创建,show index from users;你看Sub_part,是不是长度为2,懂了吗,那么总的来说创建普通索引还是比较简单的吧


3. 直接修改说了,直接删除说了,还有一个是创建表的时候就可以指定索引,创建表的语句还会不会写啦,咱们写一个

比如我现在要创建一个什么表呢,我要创建一个Person,然后里面有id字段,里面有p_name字段,有p_age字段,怎么创建,

create table创建一个表,然后后面跟一个表名,括号,里面跟着列名,类型,及其特点,比如id,什么类型呢,int类型的,

然后是不是可以primary key,是不是还可以自动增长啊

auto_increment

create table person (
 id int primary key auto_increment,
 p_name varchar(40),
 INDEX (p_name)
)怎么去创建索引啊,我们先看第一种啊

1. 普通索引,所谓的普通索引是什么啊



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: