T-sql 学习(7) - DDL

来源:互联网 发布:淘宝网 pong ipad 编辑:程序博客网 时间:2024/06/04 18:03

 DDL(数据定义语言)

1)一般说来,
参照完整性(主键外键) > 触发器 > 存储过程


2)Foreign Key:
有四种选择:CASCADE | NO ACTION | SET DEFAULT |SET NULL

如果被参照的列运行NULL,那么参照列也是允许NULL出现;

3)主键约束与UNIQUE约束有哪些区别?
主键值是具有唯一性的,因此主键列不能再实施唯一性约束。与主键约束不同的是一个表可以定义多个唯一性约束,但是只能定义一个主键约束;另外唯一性约束指定的列可以设置为NULL,但是不允许有一行以上的值同时为空,而主键约束不能用于允许空值的列。

4)** 索引(index) **
a)不能把索引建立在取值非常小(bit)的和取值非常随意的列上(text、binary等),而且,实际上也没有什么实践上的意义;

b)CLUSTERED簇集索引 和NONCLUSTERED 非簇集索引
CLUSTERED
创建索引时,键值的逻辑顺序决定表中对应行的物理顺序。聚集索引的底层(或称叶级别)包含该表的实际数据行。一个表或视图只允许同时有一个聚集索引。
  聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿,后者按姓氏排列数据。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。      
     
  聚集索引对于那些经常要搜索范围值的列特别有效。使用聚集索引找到包含第一个值的行后,便可以确保包含后续索引值的行在物理相邻。

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

NONCLUSTERED
创建一个指定表的逻辑排序的索引。对于非聚集索引,数据行的物理排序独立于索引排序。
无论是使用 PRIMARY KEY 和 UNIQUE 约束隐式创建索引,还是使用 CREATE INDEX 显式创建索引。每个表都最多可包含 249 个非聚集索引。
非聚集索引与聚集索引一样有 B树结构,但是数据行不按非聚集索引键的顺序排序和存储。      


c)DROP_EXISTING

d)CREATE INDEX 语句同其他查询一样优化。为了节省 I/O 操作,查询处理器可以选择扫描另一个索引,而不是执行表扫描。在某些情况下,

可不必执行排序操作。

5)临时对象,局部临时对象:#,全局:##


其他:
1)B树的平衡因子(r),节点X的r就表示x的左子树的深度-右子树的深度。然后我们要保证一棵树平衡,就是要保证左右子树的深度差小于等

于1.所以r的取值能且仅能取0,-1,1.

原创粉丝点击