Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2790323
  • 博文数量: 471
  • 博客积分: 7081
  • 博客等级: 少将
  • 技术积分: 5369
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-04 21:55
文章分类

全部博文(471)

文章存档

2014年(90)

2013年(69)

2012年(312)

分类: Mysql/postgreSQL

2012-03-18 21:30:10

创建表的时候创建索引(1

创建表时可以直接创建索引,这种方式最简单、方便。其基本形式如下:

1         CREATE TABLE  表名 ( 属性名 数据类型 [完整性约束条件], 

2         属性名 数据类型 [完整性约束条件], 

3         ...... 

4         属性名 数据类型 

5         [ UNIQUE | FULLTEXT | SPATIAL ]  INDEX | KEY 

6         [ 别名 ]  ( 属性名1  [(长度)]  [ ASC | DESC] ) 

7         );

其中,UNIQUE是可选参数,表示索引为唯一性索引;FULLTEXT是可选参数,表示索引为全文索引;SPATIAL也是可选参数,表示索引为空间索引;INDEX和KEY参数用来指定字段为索引的,两者选择其中之一就可以了,作用是一样的;"别名"是可选参数,用来给创建的索引取的新名称;"属性1"参数指定索引对应的字段的名称,该字段必须为前面定义好的字段;"长度"是可选参数,其指索引的长度,必须是字符串类型才可以使用;"ASC"和"DESC"都是可选参数,"ASC"参数表示升序排列,"DESC"参数表示降序排列。

  1. 创建一个普通索引时,不需要加任何UNIQUE、FULLTEXT或者SPATIAL参数。
  2. create table student
  3. (
  4.        id int,
  5.        username varchar(20),
  6.        password varchar(20),
  7.        index (id)
  8. )
  9. show create table student
  10. CREATE TABLE `student`
  11. (
      `id` int(11) DEFAULT NULL,
      `username` varchar(20) DEFAULT NULL,
      `password` varchar(20) DEFAULT NULL,
      KEY `id` (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8

 

  1. #创建唯一性索引时,需要使用UNIQUE参数进行约束。
  2. #在表中的id字段上建立名为index2_id的唯一性索引,且以升序的形式排列。
  3. create table student2
  4. (
  5.        id int,
  6.        username varchar(20),
  7.        unique index id2(id asc)
  8. )

 

  1. #全文索引只能创建在CHAR、VARCHAR或TEXT类型的字段上。
  2. #而且,现在只有MyISAM存储引擎支持全文索引。

  3. create table student3
  4. (
  5.        id int,
  6.        info VARCHAR(20) ,
  7.      FULLTEXT INDEX stu3_info (info)
  8. )ENGINE=myisam

如果表的存储引擎不是MyISAM存储引擎,系统会提示"ERROR 1214 (HY000): The used table type doesn't support FULLTEXT indexes"。
注意:目前只有MyISAM存储引擎支持全文索引,InnoDB存储引擎还不支持全文索引。因此,在创建全文索引时一定注意表的存储引擎的类型。对于经常需要索引的字符串、文字数据等信息,可以考虑存储到MyISAM存储引擎的表中。

  1. #单列索引是在表的单个字段上创建索引。
  2. #在表中的subject字段上建立名为index4_st的单列索引。
  3. create table course
  4. (
  5.        id int,
  6.        subject VARCHAR(30) ,
  7.        INDEX cname_index(subject(10)) #拿前缀
  8. )
  9. #subject字段长度为20,而index4_st索引的长度只有10。
  10. #这样做的目的还是为了提高查询速度。
  11. #对于字符型的数据,可以不用查询全部信息,而只查询其前面的若干字符信息。
  1. #创建多列索引是在表的多个字段上创建一个索引。
  2. #在表中的name和***字段上建立名为stu_ns的多列索引。
  3. create table student5
  4. (
  5.        id int,
  6.        name varchar(50),
  7.        *** char(10),
  8.        index stu_ns(name,***)
  9. )
  10. #name和***字段上已经建立了一个名为index5_ns的单列索引。多列索引中,
  11. #只有查询条件中使用了这些字段中第一个字段时,索引才会被使用。

在已经存在的表上创建索引
在已经存在的表中,可以直接为表上的一个或几个字段创建索引。基本形式如下:
1 CREATE  [ UNIQUE | FULLTEXT | SPATIAL ]  INDEX  索引名 
2  ON  表名  (属性名  [ (长度) ]  [  ASC | DESC] );
其中,UNIQUE是可选参数,表示索引为唯一性索引;FULLTEXT是可选参数,表示索引为全文索引;SPATIAL也是可选参数,表示索引为空间索引;"INDEX"参数用来指定字段为索引的;"索引名"参数是给创建的索引取的新名称;"表名"参数是指需要创建索引的表的名称,该表必须是已经存在的,如果不存在,需要先创建;"属性名"参数指定索引对应的字段的名称,该字段必须为前面定义好的字段;"长度"是可选参数,其指索引的长度,必须是字符串类型才可以使用;ASC和DESC都是可选参数,ASC参数表示升序排列,DESC参数表示降序排列。

CREATE  UNIQUE  INDEX  course_index  ON  course(course_id) ;

删除user表上的index_user索引

执行DROP语句可以删除user表上的索引。代码执行结果如下:

1         mysql> DROP INDEX index_user ON user; 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

阅读(570) | 评论(0) | 转发(0) |
0

上一篇:mysql 索引

下一篇:mysql 视图

给主人留下些什么吧!~~