2012年12月22日

摘要: 共有两类基本的system stored procedure:system stored procedure:T-SQL语言写的,在master数据库中提供的,大部分使用的是sp_前缀,在其他数据库中使用的时候,不需要指定master数据库作为他们的名称的一部分,典型应用于管理任务system extended stored procedure:非托管代码写的(主要是C++),通过DLL提供的,大部分使用的是xp_前缀,用来扩展无法使用T-SQL完成的任务还可以创建用户自定义的extended stored procedure,然后附加到SQL Server上,现在已经被遗弃,因为extend 阅读全文
posted @ 2012-12-22 23:25 马啸西风 阅读(1830) 评论(0) 推荐(0) 编辑
 
摘要: 非聚集索引也是基于二叉树,叶子节点存储的是指向表结构的指针,而不是数据,数据和索引是分开存储的,其Index ID=2或者更高;提高查询性能,降低数据修改性能;一张表最多可以建999个非聚集索引当表是作为堆构建时,叶子节点存储的是Row ID指针;当表是使用聚集键构建时,叶子节点存储的是聚集键,如果聚集键不唯一的话,还需要为每个数据行保存一份uniqueifier值获取索引信息的方法:SSMS:可以查看每个表的索引,还包括预先建好的报表,这些报表展示数据库的状态,其中就包括索引信息sp_helpindex系统存储过程Catalog Views:sys.indexes:索引类型、文件组或者par 阅读全文
posted @ 2012-12-22 23:23 马啸西风 阅读(481) 评论(0) 推荐(0) 编辑
 
摘要: Execution Plan查询计划展示了SQL Server试图如何执行查询以及实际上是如何执行查询的;查询计划最佳使用方法不是查看一个查询计划,解决查询中性能最坏的地方,而是你认为SQL Server会如何执行你查询,并通过查询计划验证SQL Server是否按照你设想执行了查询计划查询执行过程:T-SQL解析,检查查询的语句是否符合语法对象名称确定,确定查询中对象名称指的是哪个底层对象查询优化,根据可用的统计信息,决定如何执行查询;不一定使用可能的最佳的查询计划,其目的是在合理的时间范围内使用满意的查询计划,因为寻找最佳的查询计划可能会消耗更多的时间,查询越复杂,需要评估查询计划的时间越 阅读全文
posted @ 2012-12-22 23:21 马啸西风 阅读(436) 评论(0) 推荐(0) 编辑
 
摘要: Heap就是数据页之间没有顺序以及数据页中数据行之间没有顺序的表,是最简单的表结构,数据行被加到数据页第一个可用位置,如果当前页没有足够空间的话,就创建额外的数据页;SQL Server在称为Index Allocation Map的内部结构中使用一个条目跟踪可用的数据页,这个条目的index_id=0在堆上执行的操作:INSERT:每个新行都放在第一个可用页上UPDATE:数据行即可以仍然在同一页上(如果大小合适的话),或者被从当前页删除,并放到第一个可用页上DELETE:释放当前页的空间,数据没有被覆盖,空间仅仅是被标记为可以被重用(即数据不会立即被删除,只有在需要在这块被删除的空间上分配 阅读全文
posted @ 2012-12-22 23:20 马啸西风 阅读(426) 评论(0) 推荐(0) 编辑
 
摘要: 当SQL Server访问表中的数据时,它扫描表的所有页或者使用索引减少需要扫描的行;有时SQL Server会创建临时索引以提高查询性能,但是这样的行为不是数据库管理员或者程序员可控的行为,并且只针对单次查询;除标准类型索引外,还包括其他类型索引:Full Text Index:提供灵活的文本查询Spatial Index:为Geometry、Geography类型创建的索引Primary and Secondary XML Index:帮助查询XML数据ANSI SQL的定义中并没有描述索引,索引被认为是数据库内部实现细节,SQL Server使用索引提高性能和实现特定的约束;当你创建主键 阅读全文
posted @ 2012-12-22 23:18 马啸西风 阅读(380) 评论(0) 推荐(0) 编辑
 
摘要: Indexed Views:通过在视图上创建聚集索引将视图物化,通常用来提高查询性能,复杂的Join和聚合函数都被提前计算出来,避免在查询执行这些操作,以此来提高性能Views通常用来聚集Focus、简化、定制用户对数据库的视角,其优点包括:允许用户集中在和他们相关或者允许他们操作的那一小块数据上隐藏了查询的复杂性,用户不需要关心视图中涉及的复杂查询,他们可以像表一样操作视图简化用户许可管理,即提供一种安全机制,只允许用户通过视图访问数据,不允许用户直接操作底层表为应用程序提供导出的数据,许多应用程序没有权限执行存储过程或者T-SQL代码,只可以查询数据,视图将应用程序需要导出的数据独立出来提 阅读全文
posted @ 2012-12-22 23:16 马啸西风 阅读(2685) 评论(0) 推荐(1) 编辑
 
摘要: Table可以用来作为安全边界,即表级别安全许可;SQL Server中支持Column、Table级别安全许可,在SQL Server中还没有行级别安全许可,不过可以通过视图、存储过程、触发器来实现行级别安全许可A candidate key用来唯一标示一行,主键就是从潜在的多个candidate key中选择的;通常来说,如果表经过了正确的规范化处理的话,一个表应该只有一个candidate key可以用来作为主键,但这不是绝对的;主键必须唯一、不允许为null、不允许修改surrogate key用来作为表的唯一标示,不是根据真正的数据得来的,和表中其他列不相关;Natural Key则 阅读全文
posted @ 2012-12-22 23:13 马啸西风 阅读(1350) 评论(0) 推荐(0) 编辑
 
摘要: 数据类型的选择帮助优化查询,比如针对int类型列和针对文本类型列可能会生成完全不同的查询计划三种数据类型:系统数据类型别名数据类型:用户可以为系统数据类型提供一个别名,并且可以对数据类型做进一步限制,这样可以保持数据库和应用程序的一致性用户自定义数据类型:引入的托管代码中的数据类型,包括CLR中的系统数据类型和CLR中用户自定义数据类型整数数据类型:tinyint存储的是一个字节(8位),值范围是0-255smallint存储的是两字节(16位),值范围是-32768-32767int存储的是四字节(32位),值范围是-2147483648-2147483647bigint存储的是八字节,值范 阅读全文
posted @ 2012-12-22 23:11 马啸西风 阅读(7158) 评论(0) 推荐(0) 编辑