SQL Server性能优化(15)选择合适的索引
2024-10-06 01:27:18
一、关于聚集索引列的选择(参考)
1. 聚集索引所在的列,或者列的组合最好是唯一的。
当我们创建的聚集索引的值不唯一时,SQL Server则无法仅仅通过聚集索引列(也就是关键字)唯一确定一行。此时,为了实现对每一行的唯一区分,则需要SQL Server为相同值的聚集索引列生成一个额外的标识信息进行区分,这也就是所谓的uniquifiers。而使用了uniquifier后,对性能产生的影响分为如下两部分:
a. SQL Server必须在插入或者更新时对现在数据进行判断是否和现有的键重复,如果重复,则需要生成uniquifier,这个是一笔额外开销。
b. 因为需要对相同值的键添加额外的uniquifier来区分,因此键的大小被额外的增加了。因此无论是叶子节点和非叶子节点,都需要更多的页进行存储。从而还影响到了非聚集索引,使得非聚集索引的书签列变大,从而使得非聚集索引也需要更多的页进行存储。
2. 最好使用窄列或者窄列组合作为聚集索引列。原理同上。
3. 使用值很少变动的列或列的组合作为聚集索引列
a. 变动时,会造成页面重新排序,产生分页。
b. 会产生碎片。
c. 会引起非聚集索引的RID查找发生改变
4. 最好用自增列作为索引列。
参考:
1. T-SQL查询高级--理解SQL SERVER中非聚集索引的覆盖,连接,交叉和过滤,文章以图标的方式描述,思路清晰,便于理解。
最新文章
- spring maven pom.xml设置
- visio个人专注
- iOS一些关于日历的问题
- dmesg 的时间戳处理
- 【转】CDH5.x升级
- 【POJ】3523 The Morning after Halloween
- MySql事务及隔离级别
- 【读书笔记】《未来闪影》罗伯特·J·索耶
- ios-上拉电阻负载许多其他接口
- Sphinx下载、安装、配置、Hello World、文档阅读
- 乐观锁vs悲观锁
- C#订阅与发布标准实现
- Mysql报错[Warning] TIMESTAMP with implicit DEFAULT value is deprecated和Buffered warning: Changed limits
- ubuntu 安装 c语言的库函数man手册
- Java知多少(39)interface接口
- 【Hadoop学习之十一】MapReduce案例分析三-PageRank
- TAF /tars必修课(一):整体架构理解
- 汉诺塔问题python
- C3P0连接池使用教程
- PostgreSQL恢复误删数据
热门文章
- 用<;pre>;预格式化的文本
- js学习(5)语法专题
- ES6 Number
- Job for ssh.service failed because the control process exited with error code.......
- setsockopt设置socket状态
- win10下使用wget
- 数据库-mysql语句-查-WEB服务器
- Servlet执行流程和生命周期
- xpath获取一个标签下的多个同级标签
- C语言中,int型函数返回值可以为bool型。