写点什么

内存 OLTP 的索引

  • 2014-02-10
  • 本文字数:1119 字

    阅读完需:约 4 分钟

SQL Server 内存 OLTP 的索引与普通索引不一样。这不一定是坏事,只是你要小心它们的差异,避免造成性能问题。

内存优化的非聚簇索引与基于磁盘的非聚簇索引的不同之处在于,他们一直在涵盖。你不需要指定要包含哪些列,除了真正的索引列,“其它列也都将虚拟地涵盖在内”。

非聚簇索引的一个有趣的限制是它只能单向扫描。比如索引是“OrderDate ASC”时,你不能用这个索引以订单日期降序来检索记录。

另一种类型的索引是内存优化的哈希索引。这种索引是为“点式查找操作(point-lookup operations)”和全扫描设计的。它不能用于排序的扫描和不等式查找操作。微软提供了一些在非聚簇索引和哈希索引之间进行选择的指导原则

  • 如果你只需要执行点式查找,也就是说你只需要获取单独索引键值的记录,则应使用哈希索引。
  • 如果你需要获取一定范围内的记录,或者需要按特定顺序排序的记录,则应使用非聚簇索引。
  • 如果你两个都需要,特别是点式查找比较频繁时,可以考虑建立两个索引。你可以在同一索引键上同时创建哈希索引和非聚簇索引。

哈希索引还需要使用桶计数。桶计数的值应该在 N 到 2N 之间,其中 N 是预期的记录数。在操作层面上,0.2N 到 5N 之间都是“可用”的。桶计数在内部始终会被向上取整到 2 的下一次方。

桶计数过高会浪费内存。对于要完全适合 RAM 的内存优化表而言,这是个敏感问题。而桶计数过低则可能会导致其他问题出现:

如果桶计数显著(十倍)低于唯一索引键的数量,很多桶将有多个索引键。这将导致大多数 DML 操作性能下降,特别是点式查找操作(查找单独的索引键)。比如说,即便索引键字段在 WHERE 子句中,并且使用等号进行 SELECT、UPDATE 和 DELETE 操作,性能也会非常差。

哈希索引可能还会遇到重复值的问题。如果多条记录的索引字段的值相同,那么这些记录会产生哈希冲突。如果这种情况很多,例如每个不同的值重复超过 10 次,那么性能就会受到影响。

对于哈希索引, SQL Server 团队建议将其转换成非聚簇索引。

绝大多数情况下应该使用非聚簇索引,因为如果出现重复,非聚簇索引的性能通常更好。如果采用这个选项,你可以考虑唯一化索引键。如下所述:

对于有大量重复的非聚簇索引,应考虑增加索引列。比如将主键字段加到索引键中,确保索引唯一,也就是说,唯一化索引。

如果值确实不同,并且你仍想使用哈希索引,那么你可以使用“超大索引”, 也就是将桶计数值设置为“唯一索引值数量的 20 到 100 倍之间”,从而减少哈希冲突的可能。

原文英文链接: More on Indexes in In-Memory OLTP


感谢吴海星对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-02-10 08:141666

评论

发布
暂无评论
发现更多内容

第四范式x英特尔“AI应用与异构内存编程挑战赛”圆满收官

第四范式开发者社区

混沌工程:分布式系统稳定性的“疫苗”

中原银行

微服务 云原生 混沌工程

打造数字化软件工厂 —— 一站式 DevOps 平台全景解读

CODING DevOps

DevOps 研发管理 CODING

金融级数据库新坐标:腾讯云TDSQL发布全自研新敏态引擎

腾讯云数据库

数据库 tdsql

欢迎 Apache ShardingSphere 社区海外新晋 Committer!

SphereEx

开源社区 ShardingSphere SphereEx Committer

Flux 源码之reactor 核心原理及概述

漫游指南

reactor Flux

嵌入式系统软件开发:你需要知道的一切

龙智—DevSecOps解决方案

嵌入式系统 嵌入式系统软件开发

使用ABAP代码返回S/4HANA Material上维护的Attachment明细

汪子熙

SAP S/4HANA 11月日更 Material

TDSQL | 云时代,我们到底需要怎样的数据库?

腾讯云数据库

数据库 tdsql

Java 处理表格,真的很爽!

程序员鱼皮

Java

如果你正在准备面试TCP,看这一篇就够了

热爱java的分享家

Java 架构 程序人生 编程语言 经验分享

前端避坑指南丨辛辛苦苦开发的APP竟然被判定为简单网页打包?

YonBuilder低代码开发平台

业务流程建模,你真的做对了吗

明道云

云小课 | SA基线检查---给云服务的一次全面“体检”

华为云开发者联盟

态势感知 华为云 基线检查 上云合规 全面体检

分析师机构发布中国低代码平台现状分析报告,华为云AppCube为数字化转型加码

华为云开发者联盟

低代码 数字化 华为云 低代码平台 AppCube

Elasticsearch 倒排索引详细剖析

大数据技术指南

11月日更

TDSQL | HTAP系统的问题与主义之争

腾讯云数据库

数据库 tdsql

Alibaba 新产 SpringCloud Aliababa(全彩第四版)开源

Geek_1df311

Java 编程 架构 微服务

秀出新天际的SpringBoot笔记,让开发像搭积木一样简单

热爱java的分享家

Java 架构 程序人生 编程语言 经验分享

保持清洁的Git提交记录,三招就够了

Geek_1df311

Java 开源 架构 git 学习

vivo统一告警平台建设与实践

vivo互联网技术

软件架构设计 运维监控 告警系统

大咖说·未来组织的底层逻辑

大咖说

云计算

如何使用SAP CRM Marketing Survey创建一个市场问卷调查

汪子熙

SAP abap 11月日更 Survey

图文并茂!你管这破玩意儿叫TCP?

热爱java的分享家

Java TCP 程序人生 编程语言 经验分享

入驻快讯 | 欢迎TDengine正式入驻 InfoQ 写作平台!

InfoQ写作社区官方

入驻快讯

TDSQL | 数据异常的本质和价值详解

腾讯云数据库

数据库 tdsql

什么是色彩心理学?

坚果

心理学 11月日更

Docker心经

卫先生

Python 编译器 编译器远程连接docker docker常用命令 docker总结

最强最全面的数仓建设规范指南(二)

五分钟学大数据

11月日更

恒源云(GPUSHARE)_教你如何团队合作搞算力!

恒源云

人工智能 深度学习 云算力

内存OLTP的索引_语言 & 开发_Jonathan Allen_InfoQ精选文章