1.5.
冗余VS第三范式1.第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。表的每一行只包含一个实例的信息。通俗地说,每个列只能包含一种含义,每一条数据只能包含一个表数据。
2.第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。通俗地说,表必须有主键。(消除部分子函数依赖)
3.第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。通俗地说,表不应该包括冗余栏位。 (消除传递依赖)
4.优化目的的冗余:以空间换时间。减少联接和复杂度。
5.静态化目的的冗余:减少对外纠纷。
1.6.
表的水平、垂直分割1.6.1.水平分割:将表分为多个表。
每个表包含的列数相同,但是行更少。如保存不同月份数据的表、按区域划分数据的表。(联合视图技术、数据转移)
1.6.2.垂直分割:将原始表分成多个只包含较少列的表。
如部分列只用于特定领域
2.
Select语句优化2.1.连接查询的优化(Inner/outer/full)
–Inner Join:两个表都满足连接条件
–Left [Outer] Join:只要求左侧表满足条件
–Right [Outer] Join:只要求右侧表满足条件
–Full [Outer] Join:左侧表或右侧表之一满足条件
–CROSS JOIN:交叉连接,无条件。
2.2.控制查询的行和列数量
–(1)Where(不返回无用的记录)
–(2)Top/Set RowCount
–(3)适当使用Distinct
–(4)Having
–(5)尽量避免使用’*’表示所有列
2.3.慎用Distinct
2.4.慎用Union
–使用OR或Union All代替
2.5.存在性判断
–替换count(*)
2.1.
SQL Server2005的排名函数 row_number:返回行序号,序号连续。
例:row_number() over(order by score desc) as rownumber
?rank:返回每行的排名,排名可以并列,并列排名后的下行排名顺序不等于前行加1,即排名不连续。
Dense_rank:返回每行的排名,排名可以并列,并列排名后的下行排名顺序等于前行加1,即排名连续。
ntile:将有序分区中的行分发到指定数目的组中。
例:ntile(4) over(order by score desc) as ntile
1Identity()拢?br />
select * from table1 where (num1 >0 or num2 >0) and num1<0
'