SQL Server中索引
一、SQL Server中数据行的存储方式
在SQL Server中存放数据的文件会以8KB的大小分页。每一页可以是数据、索引以及其他SQL Server数据库需要为其维护数据文件的数据类型。大多数页是数据页或索引页。页是SQL Server读、写数据文件的单元。每一页只包括一个对象的数据或索引信息,所以在每一个数据页上只能找到一个对象的数据,同样在每一个索引页上页只能找到一个索引的信息。
在SQL Server2000中,将一个数据行存储在多个页上是不可能的,这意味着一个数据行必须在一页上,这会导致一个数据行有8KB大小的限制(大型数据对象除外)。
在SQL Server2005 中,对于变长数据类型,例如nvarchar、varbinary,CLR等,数据行8KB的大小限制就不存在了,所以变长数据类型的数据行可以跨越多页。但是对于定长数据类型,数据行任然必须在一页上。
二、认识SQL Server中的索引
索引分为聚集索引和非聚集索引。
聚集索引(Clustered Index)
Ø 聚集索引的叶节点就是实际的数据页。
Ø 在数据页中数据按照索引顺序存储。
Ø 行的物理位置和行在索引中的位置是相同的。
Ø 每个表只能有一个聚集索引。
Ø 聚集索引的平均大小为表大小的5%。
一个聚集索引决定了一个表中数据的物理存储顺序。一个聚集索引与一个电话目录相似,电话目录是按照last name来存放。因为聚集索引决定一张表中数据的物理存放顺序,所以一张表只能有个聚集索引,一个聚集索引可以包含多个列(复合索引),就像电话目录一样按照last name 和 first name记录一样,聚集索引与Oracle中的IOT'S(Index-Organized Tables)相似。
一个聚集索引对范围查询非常有效率efficient on columns that are often searched for ranges of values。当用聚集索引把第一个行检索出来之后,后续行一定能保证在物理上是相邻的。例如,应用的某个查询需要频繁执行一个范围查询,聚集索引可以快速定位到满足条件的第一个数据,然后再检索表中与之相邻的记录直到最后一条记录。这样可以调高这类查询的性能。另外,如果某列经常用来对表中的数据进行排序(sort),该情况下也可利用聚集索引来节省每次排序的时间。
当索引值唯一时,需要查找一个指定行,此时聚集索
相关文档:
自:http://blog.csdn.net/AJAXBloger/archive/2007/08/29/1764506.aspx
子查询:
使用子查询的原则
1.一个子查询必须放在圆括号中。
2.将子查询放在比较条件的右边以增加可读性。
子查
询不包含 ORDER BY 子句。对一个 SELECT 语句只能用一个 ORDER BY 子句,
并且如果指定了它就必须放在主
SELECT 语句的最 ......
SQL SERVER维护着一组表,存储所有对象,数据类型,约束,配置选项及SQL能访问的资源,这些表称为系统目录(系统基本表).
我们在SQL SERVER2005里有很多种方法来访问元数据.一般是使用目录视图和系统函数,信息架构视图只能包含它们全部的一部分.
最佳接口:目录视图
目录视图都位于SYS架构下,包括了动态管理对象(DMV和DM ......
char、varchar、text和nchar、nvarchar、ntext
char和varchar的长度都在1到8000之间,它们的区别在于char是定长字符数据,而varchar是变长字符数据。所谓定长就是长度固定
的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;而变 ......
Case具有两种格式。简单Case函数和Case搜索函数。
--简单Case函数
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END
--Case搜索函数
CASE WHEN sex = '1' THEN '男'
  ......
三种SQL分页法效率分析
表中主键必须为标识列,[ID] int IDENTITY (1,1)
1.分页方案一:(利用Not In和SELECT TOP分页)
语句形式:利用Not In和SELECT TOP分页) 效率中,需要拼接SQL语句
SELECT TOP 10 * from TestTable WHERE (Id NOT IN (SELECT TOP 20 id&n ......