SQL Server 索引
来源:互联网 发布:wifi主人网络关闭了 编辑:程序博客网 时间:2024/06/02 05:19
聚集索引创建的时机:
1、明确的创建语句。
2、表中没有聚集索引,在创建主键的时候,会在主键所在的列(单一列、组合列)创建唯一索引。此时如果没有指定索引类型,则默认的索引类型为聚集索引即唯一聚集索引。
非聚集索引创建的时机:
1、明确的创建语句。
2、表中添加唯一约束的时候,会在约束的列上(单一列、组合列)创建唯一索引。此时如果没有指定索引类型,则默认的索引类型为非聚集索引即唯一非聚集索引。
在表中有聚集索引的时候,非聚集索引的叶子节点会存储聚集键。如果表没有聚集索引则通过RID查找。因此一般来说聚集键不应该过长,因为每建一个非聚集索引都会保存一份聚集键。故聚集键的改变会带来很多的副作用:聚集索引的重新组织、非聚集索引被修改
聚集索引会改变表的结构(逻辑上、链表结构),非聚集索引是另外存一份数据,不会改变表的结构。
非聚集索引如果能够全部覆盖查询的数据(查询覆盖)(创建索引是使用include)此时效率最高(代价小),否则会发生书签查找(代价大)。
select * from sys.dm_db_index_physical_stats('db_id','object_id','index_id','partition_number',null);
dbcc ind('db_id/db_name','object_id/object_name',1);
sp_autostats table_name;
通过聚集索引查找数据:
1、SELECT TOP 1000 [A]
,[B]
FROM [zws].[dbo].[AB]
where a=21111 -- a 为聚集索引所在列
2、select * from sys.dm_db_index_physical_stats(DB_ID('zws'),object_id('dbo.ab'),1,null,'detailed') -- 查看B树层数。
3、dbcc ind(zws,ab,1) --查看索引的详细信息。
dbcc page('zws',1,413,3) --由根节点开始,根据 childpageid 和 索引所在列a的值开始下一层的查找。
dbcc page('zws',1,18720,3) -- 中间层,根据 childpageid 和 索引所在列a的值开始下一层的查找。
dbcc traceon(3604); --叶子节点
go
dbcc page('zws',1,19076,3)
go
通过非聚集索引查找数据:步骤同上,不过在堆表中会发现叶子节点存的是RID以及哈希值(非聚集索引的哈希值)
create function convert_RIDs (@rid BINARY(8))
returns varchar(30)
/******************************************
功能:将RID转回fileid:pageid:slotnumber
******************************************/
as
begin
return(
convert (varchar(5),
convert(int,substring(@rid,6,1)
+substring(@rid,5,1)))
+':'+
convert (varchar(10),
convert(int,substring(@rid,4,1)
+substring(@rid,3,1)
+substring(@rid,2,1)
+substring(@rid,1,1)))
+':'+
convert (varchar(5),
convert(int,substring(@rid,8,1)
+substring(@rid,7,1))))
end;
go
非聚集索引没有定义为唯一时,则中间级别也会带上聚集键。
如果删除一个聚集索引叶子节点的所有数据, dbcc ind(zws,ab,1)将不会再显示该叶子节点。但是运行 dbcc page(zws,1,18369,3) 仍会显示该页面数据。但是只会有一条。且Record Type = GHOST_DATA_RECORD(虚影)。非聚集索引中则会将数据直接删除。
- SQL server 索引
- 优化SQL Server索引
- 优化SQL Server索引
- SQL Server 索引碎片
- sql Server 索引优化
- SQL Server全文索引
- sql Server索引优化
- sql Server 索引优化
- SQL Server创建索引
- SQL Server 索引维护
- Sql Server 索引
- SQL Server索引原则
- SQL Server 索引分析
- SQL Server中索引
- sql server 索引入门
- SQL Server索引原则
- 深入浅出SQL Server索引
- SQL Server全文索引
- 文件上传
- mysql php pdo query print_r global echo
- nextval 和 currval
- 第5节-Linux界面介绍与开关机方法
- JavaWeb分页显示内容之分页查询的三种思路(数据库分页查询)
- SQL Server 索引
- System.load 和 System.loadLibrary区别与详解
- Django防止XSS攻击的几种方式
- Packets
- Docker之常用命令
- 鼠标移上去div边框阴影慢慢出现
- 数据库操作的基本步骤
- matlab中im2bw函数的用法
- docement.onreadystatechange页面加载状态