Xcopy 部署是一项功能,用于将应用程序和数据库 (.mdf) 文件复制到另一台计算机或同一台计算机中其他位置,而无需其他配置
Xcopy 部署的工作原理是什么?
当应用程序首次建立连接时,SQL Server Express 可以自动将 .mdf 文件附加到正在运行的 SQL Server Express 实例上。当用户关闭或退出应用程序时,SQL Server Express 便将 .mdf
文件从实例上分离出来。使用该功能可完全移植 .mdf 文件:您可以复制和移动文件,并可在同一实例中同时运行文件的多个副本。
3.数据库基础知识
1)数据库
表上的控制: 约束、触发器、默认值和自定义用户数据类型
不能在 master 数据库中创建任何用户对象(例如表、视图、存储过程或触发器)。master 数据库包含 SQL Server 实例使用的系统级信息(例如登录信息和配置选项设置)。
*数据库快照 数据库(源数据库)的只读、静态视图。 (就类似操作系统还原)
2)了解数据库
系统数据库: master 数据库 记录 SQL Server 实例的所有系统级信息。
msdb 数据库
用于 SQL Server 代理计划警报和作业。
model 数据库
用作 SQL Server 实例上创建的所有数据库的模板。对 model 数据库进行的修改(如数据库大小、排序规则、恢复模式和其他数据库选项)将应用于以后创建的所有数据库。
Resource 数据库
一个只读数据库,包含 SQL Server 2005 包括的系统对象。系统对象在物理上保留在 Resource 数据库中,但在逻辑上显示在每个数据库的 sys 架构中。
tempdb 数据库
一个工作空间,用于保存临时对象或中间结果集。
1).mdf 主要数据文件 ;就1个。包含数据库的启动信息
2).ndf 次要数据文件;可多个,由用户定义并存储用户数据。通过将每个文件放在不同的磁盘驱动器上,次要文件可用于将数据分散到多个磁盘上。
3).ldf 事务日志; 保存用于恢复数据库的日志信息。每个数据库必须至少有一个日志文件。事务日志的建议文件扩展名是 .ldf。
另:日志传送,数据库镜像
索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度。索引包含由表或视图中的一列或多列生成的键。这些键存储在一个结构(B 树)中,使 SQL Server 可以快速有效地查找与键值关联的行。
聚餐索引:一个表或一个视图只能有1个;因为一个表默认只能按照1个字段排序。 (聚集表)
如果表没有聚集索引,则其数据行存储在一个称为堆的无序结构中。
非聚簇索引:独立于数据行的存储结构,每个键值存放的是指向该数据行的指针
从非聚集索引中的索引行指向数据行的指针称为行定位器。行定位器的结构取决于数据页是存储在堆中还是聚集表中。对于堆,行定位器是指向行的指针。对于聚集表,行定位器是聚集索引键。
聚集索引和非聚集索引都可以是唯一的。这意味着任何两行都不能有相同的索引键值。另外,索引也可以不是唯一的,即多行可以共享同一键值。
每当修改了表数据后,都会自动维护表或视图的索引。
当表建立了 主键primary key 或者唯一键 unique key,则数据库引擎自动对该列创建 聚簇索引。
设计比较好的可以减少I/O操作。
SQL 查询分析器 中 显示查询执行的计划,引擎会根据实际情况选择实际的 查询。可以显示详细的 cpu占用评估等。
查询优化器评估可用于检索数据的每个方法,然后选择最有效的方法。可能采用的方法包括扫描表和扫描一个或多个索引(如果有)。
1)扫描表时,查询优化器读取表中的所有行,并提取满足查询条件的行。扫描表会有许多磁盘 I/O 操作,并占用大量资源。但是,如果查询的结果集是占表中较高百分比的行,扫描表会是最为有效的方法。
2)
查询优化器使用索引时,搜索索引键列,查找到查询所需行的存储位置,然后从该位置提取匹配行。通常,搜索索引比搜索表要快很多,因为索引与表不同,一般每行包含的列非常少,且行遵循排序顺序。
聚簇索引默认单个分区,如果多个分区,就有多个B树,因为一个分区一个B树。
对于某个聚集索引,sys.system_internals_allocation_units 中的 root_page 列指向该聚集索引某个特定分区的顶部。SQL Server 将在索引中向下移动以查找与某个聚集索引键对应的行。为了查找键的范围,SQL Server 将在索引中移动以查找该范围的起始键值,然后用向前或向后指针在数据页中进行扫描。为了查找数据页链的首页,SQL Server 将从索引的根节点沿最左边的指针进行扫描。
下图显式了聚集索引单个分区中的结构。
总结:索引都包含键值和指向存储位置的行定位器
12.10
非聚集索引包含索引键值和指向表数据存储位置的行定位器
可以对表或索引视图创建多个非聚集索引。通常,设计非聚集索引是为改善经常使用的、没有建立聚集索引的查询的性能。
与使用书中索引的方式相似,查询优化器在搜索数据值时,先搜索非聚集索引以找到数据值在表中的位置,然后直接从该位置检索数据。这使非聚集索引成为完全匹配查询的最佳选择,因为索引包含说明查询所搜索的数据值在表中的精确位置的项。例如,为了从 HumanResources.Employee 表中查询向特定经理报告的所有雇员,查询优化器可能使用非聚集索引 IX_Employee_ManagerID;它以 ManagerID 作为其键列。查询优化器能快速找出索引中与指定 ManagerID 匹配的所有项。每个索引项都指向表或聚集索引中准确的页和行,其中可以找到相应的数据。在查询优化器在索引中找到所有项之后,它可以直接转到准确的页和行进行数据检索。
ps:索引维护
设计非聚集索引时需要注意数据库的特征。
总结:更新要求低可以从非聚簇索引获益;
只读的数据库;
大量要更新的表数据,应避免使用过多的索引; 索引越窄越好,列越少越好。
在创建非聚集索引之前,应先了解访问数据的方式。考虑对具有以下属性的查询使用非聚集索引:
考虑具有以下一个或多个属性的列:
总结:覆盖查询,表中若有聚簇索引,则聚簇索引将自动追加到非聚簇索引的末端。 比如: id,非聚簇索引列,聚簇索引键值
在创建非聚集索引时,可以指定若干索引选项。要尤其注意以下选项:
非聚集索引与聚集索引具有相同的 B 树结构,它们之间的显著差别在于以下两点:
如果表没聚簇索引,则聚簇则存放 行的定位指针指向数据航; 若有聚簇索引,则行定位器是行的聚集索引键
非聚集索引行中的行定位器或是指向行的指针,或是行的聚集索引键,如下所述:
下图说明了单个分区中的非聚集索引结构。
唯一索引确保索引键不包含重复的值,因此,表或视图中的每一行在某种程度上是唯一的。
聚集索引和非聚集索引都可以是唯一索引。
如果想要索引键值有唯一的值,就是其他行不能有相同的,则可以建立唯一索引。 能够确保定义的列的数据完整性。
一种非聚集索引,它扩展后不仅包含键列,还包含非键列。
视图的索引将具体化(执行)视图,并将结果集永久存储在唯一的聚集索引中,而且其存储方法与带聚集索引的表的存储方法相同。创建聚集索引后,可以为视图添加非聚集索引。
一种特殊类型的基于标记的功能性索引,由 Microsoft SQL Server 全文引擎 (MSFTESQL) 服务创建和维护。用于帮助在字符串数据中搜索复杂的词。
xml 数据类型列中 XML 二进制大型对象 (BLOB) 的已拆分持久表示形式。