AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

内存 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:141453

评论

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

MySQL同步ES的6种方案!

量贩潮汐·WholesaleTide

MySQL 数据库

Nacos源码—Nacos集群高可用分析(三)

不在线第一只蜗牛

Java 源码

Nacos源码—Nacos集群高可用分析(四)

不在线第一只蜗牛

Java 源码

「银河通用」创始人王鹤:人形机器人跳舞是预先编程,马拉松是遥控操作!

机器人头条

科技 大模型 人形机器人 具身智能

【HarmonyOS 5】鸿蒙页面和组件生命周期函数

GeorgeGcs

中望CAD适配鸿蒙电脑,打造“多端+全流程”设计行业全场景方案

最新动态

SeaTunnel二次开发进阶:企业级复杂场景下的亿万级数据处理与智能容错机制

白鲸开源

大数据 开源 技术分享 数据集成 Apache SeaTunnel

【HarmonyOS 5】鸿蒙中常见的标题栏布局方案

GeorgeGcs

全球发布在即 | Bonree ONE 2025 春季版,三大核心亮点抢先看!

博睿数据

简历优化全攻略,这样写最吸睛

安全乐谷

面试 找工作 招聘 简历 本科

YashanDB DATE_FORMAT函数

YashanDB

如何快速开发视频下载器

石臻臻的杂货铺

视频处理 视频下载 AI翻译

立即报名!5月9日19点,航遥中心教授级高工解析大模型如何赋能科研

ModelWhale

大模型 科研 DeepSeek

YashanDB CRYPT_SIGN函数

YashanDB

YashanDB DATE_SUB函数

YashanDB

Pectra 升级是什么?一文看懂以太坊最新技术进展

TechubNews

小艺对话一键生成导图,万兴脑图联合鸿蒙电脑打造全新思维管理系统

最新动态

【HarmonyOS 5】鸿蒙Web组件和内嵌网页双向通信DEMO示例

GeorgeGcs

YashanDB CRYPT_VERIFY函数

YashanDB

开源之夏2025 | SeaTunnel黄金席位争夺战,斩获高额奖金+顶尖履历!

白鲸开源

大数据 开源 数据集成 Apache SeaTunnel 开源之夏

YashanDB DATE函数

YashanDB

YashanDB DATE_ADD函数

YashanDB

Java的"伪泛型"变"真泛型"后,会对性能有帮助吗?

电子尖叫食人鱼

Java

局域网视频会议软件,一款适配国产化的视频软件

BeeWorks

即时通讯

适配国产化,私有化部署的局域网即时通讯工具-BeeWorks

BeeWorks

Oracle云被曝史诗级数据泄露,企业用户如何自救

YashanDB

摩尔线程 MTT S4000训推一体计算卡通过中国信通院AI芯片和大模型适配验证

新消费日报

【HarmonyOS 5】鸿蒙发展历程

GeorgeGcs

网易游戏 Flink 云原生实践

Apache Flink

大数据 flink 云原生

【HarmonyOS 5】鸿蒙中进度条的使用详解

GeorgeGcs

如何打造一个高并发系统?

量贩潮汐·WholesaleTide

高并发

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