2010年8月19日 17:50:43

关于表的约束

1、主键

主键主要是限制输入值的唯一性

alter table nn add constraint pk_nn primary key(n1);

--nn 表名

--n1 表nn的其中一个字段

2、外键

外键是将表的其中一个字段与另一表的某一字段相关联

alter  table mm add constraint fk_mm foreign key(n1) references nn(n1); --表示mm表的n1字段参照nn表的n1字段

3、check

用于限制字段的取值范围

alter  table nn add constraint n1 check(n1='男' or n1='女');--表示字段n1取值只能是男或女

4、查看表的约束

select constraint_name,constraint_type from user_constraints where table_name='g3e_attribute'  --查看表g3e_attribute的约束名与类型

 

关于索引

 1、传统索引

CREATE INDEX mycolumn_index ON mytable (myclumn);
--mycolumn_index表示索引名(你可以给一个索引起任何名字,但你应该在索引名中包含所索引的字段名,这对你将来弄清楚建立该索引的意图是有帮助的)

--mytable创建索引的表

-- myclumn要创建索引的字段

2、位图索引

针对唯一值很少的,每一个唯一值对应的记录又很多采用传统索引作用就不大了,因此引入了位图索引

create  bitmap index mycolumn_index on mytable (myclumn);

3、唯一索引

create unique index mycolumn_indexon mytable (myclumn);

4、聚集索引

    聚集索引对于那些经常要搜索范围值的列特别有效。使用聚集索引找到包含第一个值的行后,便可以确保包含后续索引值的行在物理相邻。例如,如果应用程序执行 的一个查询经常检索某一日期范围内的记录,则使用聚集索引可以迅速找到包含开始日期的行,然后检索表中所有相邻的行,直到到达结束日期。这样有助于提高此 类查询的性能。同样,如果对从表中检索的数据进行排序时经常要用到某一列,则可以将该表在该列上聚集(物理排序),避免每次查询该列时都进行排序,从而节 省成本。 

CREATE CLUSTERED INDEX mycolumn_clust_index ON mytable(mycolumn)  
    一个表中只能有一个聚簇索引
   *如果表中有重复的记录,当你试图用这个语句建立索引时,会出现错误。但是有重复记录的表也可以建立索引;你只要   使用关键字ALLOW_DUP_ROW把这一点告诉SQL Sever即可:
CREATE CLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn) WITH ALLOW_DUP_ROW
5、非聚集索引

非聚集索引与课本中的索引类似。数据存储在一个地方,索引存储在另一个地方,索引带有指针指向数据的存储位置。索引中的项目按索引键值的顺序存储,而表中的信息按另一种顺序存储

CREATE INDEX mycolumn_index ON mytable (myclumn)

6、多个字段建索引
CREATE INDEX name_index ON username(firstname,lastname)
唯一索引是指该字段不能有重复的值,而不是只能建立这一个索引。 

7、删除索引

 DROP INDEX mytable.mycolumn_index

8、查看索引

--查看索引大小 

 select sum(bytes)/(1024*1024) as "size(M)" from user_segments where segment_name=upper('&index_name');

--查看索引个数和类别
select index_name,index_type,table_name from user_indexes order by table_name;  
--查看索引被索引的字段
select * from user_ind_columns where index_name=upper('&index_name'); 

 

posted on 2010-08-19 18:31  蓝紫  阅读(421)  评论(0编辑  收藏  举报