420 likes | 635 Views
全文搜索. 全文目录. 全文索引. 全文索引. 全文索引. 一个数据库只能有一个全文目录 一个全文目录可以有多个全文索引 一张表只能有一个全文索引 全文索引的列必须是 not null 和唯一的. Lob_tree_page. Lob_Mix_Page. Lob_Mix_Page. Lob_Mix_Page. Lob_Mix_Page. Lob_Mix_Page. Lob_Mix_Page. GetNext () 函数. 不断循环调用 GetNext () 函数去获取下一行的值. 2012 年的数据. 2013 年的数据. 文件组 1. 文件组 2.
E N D
全文搜索 全文目录 全文索引 全文索引 全文索引 一个数据库只能有一个全文目录 一个全文目录可以有多个全文索引 一张表只能有一个全文索引 全文索引的列必须是not null和唯一的
Lob_tree_page Lob_Mix_Page Lob_Mix_Page Lob_Mix_Page Lob_Mix_Page Lob_Mix_Page Lob_Mix_Page
GetNext()函数 不断循环调用GetNext()函数去获取下一行的值
2012年的数据 2013年的数据 文件组1 文件组2 文件组3 当前的数据 (非历史数据) 历史数据 聚集索引/ 非聚集索引(索引)
NULL 位图(2个字节 16位) 第一行记录
扫描(全表扫描、聚集索引扫描、非聚集索引扫描)扫描(全表扫描、聚集索引扫描、非聚集索引扫描) Allocation scan Range scan
第一次分配的页面的c1列的值分别是 21~100 第三次分配的页面的c1列的值分别是 1~10 第二次分配的页面的c1列的值分别是 11~20
Range scan Allocation scan
Eager Spool Eager Spool Eager Spool Eager Spool Index Spool Row Count Spool Spool Table Spool Lazy Spool Lazy Spool Lazy Spool Lazy Spool Window Spool
非聚集索引 tb表 Spool数据库 Tempdb数据库
聚集索引 tb表 叶子节点(表数据) Tempdb数据库 Spool数据库
第一步:SQLSERVER扫描第一行记录 第二步:更新第一行记录的Salary为2.5(Salary*2.5)
第三步:非聚集索引按照非聚集索引键进行重新排序第三步:非聚集索引按照非聚集索引键进行重新排序 第四步:扫描第二行记录
第五步:更新第二行记录的Salary为5.0 (Salary*2.5)
有4行记录 有4行记录 聚合 4+4+4=12 有4行记录
FileID:3 Partionnum:1 文件组名:FG_TestUnique_Id_01 FileID:4 Partionnum:2 文件组名:FG_TestUnique_Id_02 FileID:5 Partionnum:3 文件组名:FG_TestUnique_Id_03
在文件组一里面的数据页有2行记录 FileID:3 Partionnum:1 文件组名:FG_TestUnique_Id_01 FileID:4 Partionnum:2 文件组名:FG_TestUnique_Id_02 FileID:5 Partionnum:3 文件组名:FG_TestUnique_Id_03 在文件组二里面的数据页有2行记录 在文件组三里面的数据页有1行记录
FileID:3 Partionnum:1 文件组名:FG_TestUnique_Id_01 电脑E盘 FG_TestUnique_Id_01_data.ndf文件 FG_TestUnique_Id_02_data.ndf文件 FG_TestUnique_Id_03_data.ndf文件 FileID:4 Partionnum:2 文件组名:FG_TestUnique_Id_02 FileID:5 Partionnum:3 文件组名:FG_TestUnique_Id_03
FileID:3 Partionnum:1 文件组名:FG_TestUnique_Id_01 FileID:4 Partionnum:2 文件组名:FG_TestUnique_Id_02 FileID:5 Partionnum:3 文件组名:FG_TestUnique_Id_03
FileID:4 Partionnum:2 文件组名:FG_TestUnique_Id_02 FileID:3 Partionnum:1 文件组名:FG_TestUnique_Id_01 FileID:5 Partionnum:3 文件组名:FG_TestUnique_Id_03
FileID:3 Partionnum:1 文件组名:FG_TestUnique_Id_01 FileID:4 Partionnum:2 文件组名:FG_TestUnique_Id_02 FileID:5 Partionnum:3 文件组名:FG_TestUnique_Id_03
一个SQL批处理 一条SQL语句 或者 一个TASK 处理 真正执行 一个WORKER
客户端一 客户端二要的结果集 取走结果 由于客户端一那边的某种原因受到网络阻塞 客户端一不能及时取走他要的结果集 客户端二 网络缓冲区 客户端一的结果集
内存 3条记录 逻辑读 物理读 3条记录 客户端 磁盘
记录已经缓存在内存里 内存 3条记录 磁盘 逻辑读 客户端
逻辑读 物理读 >=
索引页 基本表(数据页) 嵌套循环 tb表有两列,索引创建在A列上
SQL2005 SSMS SQL2008 EXPRESS版 SSMS SQL2012 SSMS 性能监视器 性能监视器 性能监视器 sqlctr.ini sqlctr.ini sqlctr.ini 2008性能计数器 2005性能计数器 2012性能计数器 Windows内核
SQL2012 实例一 SQL2012性能计数器 SQL2012 实例二 SQL2012 实例三
事务128 update 数据页581 set name =英国 where id=2 事务121 已经commit 事务128 还没有commit 写入BAK文件 现在数据页面581有两个版本,一个是已经commit的版本,一个是还没有commit的版本,SQLSERVER将已commit的版本写入bak文件
默认备份f 不活动日志f 活动日志f 截断f 归档f 带入少量活动日志f BAK文件
no_truncate或copy_only参数f 不活动日志f 活动日志f 不截断f 归档f 带入少量活动日志f BAK文件
NO_TRUNCATE 指定不截断日志,并使数据库引擎尝试执行备份, 而不考虑数据库的状态。 因此,使用 NO_TRUNCATE 执行的备份可能具有不完整的元数据。 该选项允许在数据库损坏时备份日志。 BACKUP LOG 的 NO_TRUNCATE 选项相当于 同时指定 COPY_ONLY 和 CONTINUE_AFTER_ERROR。 如果不使用 NO_TRUNCATE 选项, 则数据库必须处于 ONLINE 状态。 如果数据库处于 SUSPENDED 状态, 则可能无法通过指定 NO_TRUNCATE 来创建备份。 但是,如果数据库处于 OFFLINE 或 EMERGENCY 状态,则即使使用 NO_TRUNCATE, 也不允许执行 BACKUP。
日志链的原理: 从截断部分开始算一个新的日志备份记录点,如果是copy_only 由于不截断日志,所以不会影响日志链 不活动日志f 活动日志f 截断f 归档f 带入少量活动日志f BAK文件