1、堆表
堆表通过IAM连接一起,查询时全表扫描。
1、1 非聚集索引
结构
叶子节点数据结构:行数据结构+Rid(8字节)

中间2字节有疑问?


1、2 聚集索引表
组织结构
1.2.1 聚集索引
聚集索引表由根节点(Root Node)、中间节点(Branch Nodes)、叶子节点组成。
如果叶子节点不够多时,根节点(Root Node)、中间节点(Branch Nodes)将不存在。



1.2.2 非聚集索引

避免聚集索引查找
最大键列数为 16,最大索引键大小为 900 字节
索引tree是否包含部分数据。一部分不需要建立索引,减少索引层数。2、建立索引规则
对常用查询指定列的索引可以适当增加列覆盖。
3.1 组织分析命令
用于分析表组织和索引组织查询命令。
sys.dmdbdatabasepageallocations(@DatabaseId , @TableId , @IndexId , @PartionID , @Mode)
堆表

聚集索引表

查询结果集,字段说明列
说明 PageFID
索引所在文件Id PagePid
索引所在页Id IAMFID
索引所在IAM文件Id IAMPID
索引所在IAM的页Id objectId
对象ID,表对象ID IndexId
索引类型 0堆、1聚集索引、2-250非聚集索引 PartitionNumber
索引所在分区编号 PartitionId
索引所在的分区Id IamChainType
该页存放的数据类型、in-row data 数据页或索引页、Row-overflow-data 溢出数据行页 Blob data 大文件类型页 PageType
数据类型见页类型 IndexLevel
索引级别 null 根级,0 叶子级,其他索引级 NextPageFID
双链表前级文件Id NextPagePID
双链表前级页Id PrevPageFID
双链表后级文件Id PrevPagePID
双链表后级页Id
用于查看页数据信息。 DBCC PAGE(['database name'|database id], -- can be the actual name or id of the databasefile number, -- the file number where the page is foundpage number, -- the page number within the fileprint option = [0|1|2|3] -- display option; each option provides differing levels of information)
--DBCC IND('DataPageTestDb','TestData8000',-1) 先查看表在数据里页数据信息
--DBCC PAGE(DataPageTestDb,1,8,3) 以文本信息查看
--DBCC PAGE(DataPageTestDb,1,8,3) with tableresults,以表格信息查看
3.2 查询计划
查看索引情况
--dbcc show_statistics ([tablename], [indexname])
--dbcc showstatistics (TestDataUnIndex, PKTestDataUnIndex)
命令详细见
https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2008-r2/ms174384(v=sql.105)-- 打开IO开销统计 set STATISTICS io ON
-- 打开执行时间统计 set STATISTICS TIME ON
-- Select /* from Table
或

3.3 跟踪代码生成的SQL语句
Sql Profiler 用于跟踪程序生成的语句。
参考文章
https://www.cnblogs.com/yx007/p/7268310.html
下图用于跟踪Net sqlclient data provider 产生的语句,net体系应用。

以下语句用于跟踪,在线运行时,SQL操作用时比较长的语句SELECT TOP 50totalworkertime/executioncount AS [Avg CPU Time], (SELECT SUBSTRING(text,statementstartoffset/2, (CASE WHEN statementendoffset= -1 then LEN(CONVERT(nvarchar(max), text)) /* 2 ELSE statementendoffset end -statementstartoffset)/2) FROM sys.dmexecsqltext(sqlhandle)) AS querytext,/*FROM sys.dm_exec_query_stats ORDER BY [Avg CPU Time] DESC
以下语句用于查询数据库死锁select requestsessionid,OBJECTNAME(resourceassociatedentityid) tableName from sys.dmtranlocks where resourcetype='OBJECT' use master go --检索死锁进程 select spid, blocked, loginame, lastbatch, status, cmd, hostname, programname from sysprocesses where spid in ( select blocked from sysprocesses where blocked <> 0 ) or (blocked <>0) select requestsessionid,OBJECTNAME(resourceassociatedentityid) tableName from sys.dmtranlocks where resourcetype='OBJECT'
4、其他
4.1 数据库字段类型及长度
类型
字节数
定长
变长
blob类型 uniqueidentifier
16
1 date
3
1 time
5
1 datetime2
8
1 datetimeoffset
10
1 tinyint
1
1 smallint
2
1 int
4
1 smalldatetime
4
1 real
4
1 money
8
1 datetime
8
1 float
8
1 sql_variant
8016 1 bit
1
1 decimal(18.2)
9
1 numeric(18.2)
9
1 varchar(max) 1 nvarchar(max) 1 varbinary(max) 1 XML 1 Image 1 text ntext varchar() 1 nvarchar() 1 varbinary() 1 char 1 nchar 1
以上为本篇文章的主要内容,希望大家多提提意见,如果喜欢记得点个赞哦