SQL Server 内存优化表的索引设计
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了SQL Server 内存优化表的索引设计,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2033字,纯文字阅读大概需要3分钟。
内容图文
= bucket_count) | [ NONCLUSTERED ] (column [ ASC | DESC ] [ ,... n ] ) [ ON filegroup_name | default ] }举个例子,修改表结构,向表中添加哈希索引,在定义索引时必须设置bucket_count的数量:
ALTER TABLE table_name ADD INDEX idx_hash_index_name HASH (index_key) WITH (BUCKET_COUNT = 64);
二,内存非聚集索引的内在结构
内存非聚集索引类似于B-Tree结构,称作Bw-Tree,是一个新型的B-Tree结构。从高层次上来看,Bw-Tree可以理解为按照Page ID组织的页面映射。
在Bw-Tree结构中,每个索引Page具有一组有序键值(该结构类似于普通的B树),键值是按照大小顺序排列的,并且索引中包含层次结构,父级别指向子级别,叶级别指向数据行。
差异是Bw-Tree可以把多个数据行连接在一起,级别中的页面指针是逻辑页面的ID,这个逻辑页面的ID实际上是页面映射表的偏移量,该映射表具有每个页面的物理地址,通过偏移量找到每个页面在内存中实际的物理地址。
在内存非聚集索引中,没有索引页的就地更新(in place update),为了实现该目的,引入了新的更新机制:
- 在更新页时,不需要latch 和lock
- 索引页不是固定的大小
在非叶子级别中,父级别的页面中存储的键值是它指向的子级页面中的键值的最大值,并且每一行还包含该页面逻辑页ID(偏移量)。叶级数据页不仅包含键值,还包含页面的物理地址。
三,哈希索引的内部结构
哈希索引包含一个由指针构成的数组,数组中的每个元组叫做一个hash bucket:
- 每个hash bucket占用8Bytes,用于指向key entry构成的链式列表
- 每个entry主要由索引键的值、对应的数据行的地址和指向下一个entry的指针构成
- 每个entry有一个指针,用于指向链中下一个entry,通过这种方式,entry构成链式结构
hash bucket的数量必须在索引定义时指定:
- 哈希索引的hash bucket的最大数量是 1,073,741,824
- 较短的链式列表比较长的链式列表性能更好
- hash bucket的数量与表中唯一值的数量的比值越低,每个hash bucket指向的链式列表的长度越长,性能越差。因此,应该适当增加hash bucket的数量。
- 理想情况下,hash bucket最好是表中唯一值数量的1到2倍。
参考文档:
Index Architecture & Design
SQL Server 内存优化表的索引设计
标签:soft 有一个 连接 gui index 文档 测试 修改 应该
本文系统来源:https://www.cnblogs.com/ljhdo/p/10533688.html
内容总结
以上是互联网集市为您收集整理的SQL Server 内存优化表的索引设计全部内容,希望文章能够帮你解决SQL Server 内存优化表的索引设计所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。