周未电影推荐:

《小时代》:讲述四位女生步入社会所面临的各种情感,生存问题。播放地址:http://947kan.com/movie/juqing/51068/

SQLServer中,数据的存储是按记录行来存储的,每一行包含数据的所有的列,这样的存储,是非常有利数据的查询的,
但也正因为如此,LOB页,行溢出页,表结构修改都极易产生空洞,形成磁盘碎片。

我们做个例子分析下:
测试范围->没有聚集索引,没有非聚集索引,含有定长列和变长列的堆

create table t_test
(
col1 int,
col2 varchar(10),
col3 datetime,
col4 char(10),
col5 nvarchar(4)
)
go--插入数据
insert t_test values(1,'ABC','2010-03-15','123',N'abc')
insert t_test values(2,'DEF',CURRENT_TIMESTAMP,'4567',N'defg')
GOSELECT * FROM t_testDBCC IND(test,t_test,1)
DBCC TRACEON(3604)DBCC PAGE('test',1,1456,1)/*

Slot 0, Offset 0x60, Length 44, DumpStyle BYTE

Record Type = PRIMARY_RECORD         Record Attributes =  NULL_BITMAP VARIABLE_COLUMNSRecord Size = 44                     Memory Dump @0x000000000FFEA060

0000000000000000:   30001a00 01000000 00000000 3a9d0000 †0...........:... 0000000000000010:   31323320 20202020 20200500 00020026 †123       .....& 0000000000000020:   002c0041 42436100 62006300 ††††††††††.,.ABCa.b.c.     */

记录行 状态位A 状态位B 列偏移 定长数据 表总列数

NULL位图

变长列的数目 第一变长列数据终止位置 第二变长列数据终止位置 第一列变长列的数据 第二列变长列的数据  
0x30 0x00 0x1a00 0x01000000-2020 2020 0x0500 0x00 0x0200 0x2600 0x2c00 0x41 4243 0x6100 62006300  
说明

00110000

行属性

未启用 =26

定长数据部分

(col1,col3,col4)

=5 0 =2 =38 =44 ='ABC' ='abc'  

解释:

状态位A:行属性的位图 从高位存到地位(右边第一位是bit0).

bit0:版本信息,SQL2005/08总是为

bit1-3: 0=(primary record);1=(forwarded record);2=(forwarding stud);3=(index record);4=(溢出数据);5=(ghost索引记录);6=(ghost数据记录)

bit4:表示存在NULL位图(在数据行里SQL2005/08总存在NULL位图)

bit5:表示存在变长列

bit6:未启用

bit7:表示存在幽灵记录

定长数据部分(col1,col3,col4):

01000000->00000000 00000000 00000000 00000001=1<col1的值,4字节>

00000000 3a9d0000->1001110100111010 0...0 =40250 <col3值,8字节>

31323320 20202020 2020->'123       '<col4的值,char(10),10字节>

ps:注意这里的col3的类型是datetime类型,这个类型在内部存贮并不是你们想象的那样.

我简单来说就是它将这个类型的存储分成个部分,date部分和time部分

我们的例子中 表示的时间部分,3a9d0000表示的时候date部分

因为第一部分time默认是:00:00 所以值为 3a9d0000换算成十进制为

你可以通过

    select CONVERT(int,SUBSTRING(CONVERT(varbinary(8),cast('2013-07-14' as datetime)),1,4)),--40250CONVERT(int,SUBSTRING(CONVERT(varbinary(8),cast('2013-07-14' as datetime)),5,4))—0

0500->00000000 00000101=5 表示该表有列

00->00000000 因为该表只有列 所以只需要看后面个,0表示该行的对应列不为NULL

0200->00000000 00000010=2 表示该表有列 (col2,col5)

2600->00000000 00100110=38=1+1+2+(4+8+10)+2+ceiling(5/8)+2+2+2+len('ABC')

2c00->00000000 00101100=44 因为一共就列变长列 所以它的结束位置就是行的最终长度 LENGTH 44

41 4243->01000001 01000010 01000011='ABC'

6100 62006300->01100001 00..00 01100010 00..00 01100011 00..00='abc' 这里用六个字节是因为它是NVARCHAR类型 2个字节才能存一个字符

转载于:https://www.cnblogs.com/lwqhp/p/3189198.html

存储引擎-存储结构之一:行相关推荐

  1. MySQL的MyISAM和InnoDB存储引擎表结构

    MySQL的MyISAM和InnoDB存储引擎表结构: MyISAM存储引擎: MyISAM表:每一个表都有3个文件,都位于数据库目录中. tb_name.frm 表结构定义 tb_name.MYD ...

  2. mysql format row_MySQL之InnoDB存储引擎:Row Format行格式

    MySQL下用的比较多.比较广的存储引擎就属InnoDB.这里我们来介绍下InnoDB存储引擎下数据记录的存储格式--Row Format行格式 基本操作 在MySQL中,所谓Row Format行格 ...

  3. mysql的存储引擎详解_Mysql存储引擎详解

    存储引擎的介绍 关系型数据库表是用来存储和组织信息的数据结构,可以将表理解为由行和列组成的表格. 由于表的类型不同,我们在实际开发过程中,就有可能需要各种各样的表,不同的表就意味着存储不同类型的数据, ...

  4. mysql的三大引擎是什么_MySQL常用三大存储引擎

    MySQL 常用存储引擎 存储引擎是数据库的核心,对于mysql来说,存储引擎是以插件的形式运行的,默认是InnoDB. 1. MyISAM 使用这个存储引擎,每个MyISAM在磁盘上存储成三个文件. ...

  5. mysql技术内幕innodb存储引擎——表索引算法和锁_(转)Mysql技术内幕InnoDB存储引擎-表索引算法和锁...

    表 原文:http://yingminxing.com/mysql%E6%8A%80%E6%9C%AF%E5%86%85%E5%B9%95innodb%E5%AD%98%E5%82%A8%E5%BC% ...

  6. DBA(七):PXC、MySQL存储引擎

    PXC PXC概述 PXC介绍 Percona XtrDB Cluster(简称PXC) 是基于Galera的mysql奥可用集群解决方案 Galera Cluster是Codership公司开发的一 ...

  7. Innodb存储引擎的特性(1).

    现在关于系统表空间和独立表空间还有一个问题,也要说明一下,我们把数据迁移到独立表空间后,那么现在的系统表空间中呢,还有什么内容呢,答案是我们虽然已经把表的数据从系统表空间中迁移出来,但是对于系统表空间 ...

  8. 面试必会系列 - 2.1 MySQL知识点大汇总(基本架构,存储引擎,锁,事务,索引,B+树等等)

    本文已收录至 Github(MD-Notes),若博客中图片模糊或打不开,可以来我的 Github 仓库,包含了完整图文:https://github.com/HanquanHq/MD-Notes,涵 ...

  9. MySQL事务与存储引擎相关设置

    MySQL事务与存储引擎 一.事务的ACID特点 1.原子性 2.一致性 3.隔离性 4.持久性 二.事务之间的互相影响 三.事务的四大隔离 四.事务控制语句 示例 1.开启.提交事务 2.事务回滚 ...

最新文章

  1. 腾讯1.5亿元「科学探索奖」开奖,北大夺冠,更有28岁美女博导获奖
  2. 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 三 )
  3. 第四范式AI转型合伙人招聘进行时
  4. c++ primer 5th,习题13.3 答案是不是错了?(未解决)
  5. SAP CRM呼叫中心polling and C4C notification polling
  6. C++ 常用算法之遍历
  7. 一套 SQL 搞定数据仓库?Flink有了新尝试
  8. SendGrid是如何扩展它的邮件传送系统的
  9. neo4j 机器学习_知识图谱实战系列四:neo4j的介绍和使用
  10. 手写bpnn算法实现iris多分类
  11. 关于冯乐乐《Shader入门精要 》书中基础纹理一章的一些笔记
  12. linux设置双屏拼接_双屏、3屏拼接——A卡、N卡——Windows、Linux
  13. 无人机航拍全景图这些事情一定要知道
  14. seleinum+requets 下载歌曲
  15. html 的id指什么,appid是什么?
  16. 基于O-RAN的无线云网络
  17. 硬核蹭热点系列:负油价和巴舍利耶模型
  18. Springboot整合Poi导出excel(简单版)
  19. 初级——如何进行Android单元测试
  20. 二氧化硅纳米微球量子点荧光猝灭贵金属纳米簇(NMNCs)/二氧化硅微球钼酸钙荧光粉的制备与研究

热门文章

  1. SQL小技巧系列 --- 行转列合并
  2. 【直播资料下载】Python 系列直播——深入Python与日志服务,玩转大规模数据分析处理实战第二讲...
  3. es5 - array - concat
  4. 图像处理中的跨度(stride)
  5. centos 7 安装docker 并设置阿里云镜像仓库
  6. 《Android深度探索(卷1):HAL与驱动开发》——6.4节使用多种方式测试Linux驱动...
  7. 安卓首页图片轮播效果(淘宝、京东首页广告效果)
  8. 我理解的--java观察者模式
  9. 《潜伏》走红背后的心理原因
  10. 实践lnmpde 的安装