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