2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

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

评论

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

优化大宽表查询性能,揭秘GaussDB(DWS) 谓词列analyze

华为云开发者联盟

GaussDB #数据库 analyze

出海电商如何解决网络问题

Ogcloud

SD-WAN 跨境电商网络 外贸网络 SD-WAN国际专线 国际网络专线

YOLOv5 的量化流程及部署方法

地平线开发者

自动驾驶 算法 地平线征程5 地平线征程6

华为云Flexus X实例使用教学——完整的配置选择与实操步骤讲解

轶天下事

华为ensp--BGP路由黑洞

阿落ovo

2024数据库编程大赛-八强决赛成绩揭晓

NineData

Doris NineData 第二届数据库编程大赛

2024年OpenTiny年度人气贡献者评选正式开始

OpenTiny社区

开源 前端 OpenTiny

Altair RapidMiner 解锁更高级别的功能,支持用户无缝构建和部署高级 AI agent

Altair RapidMiner

机器学习 #人工智能 altair #数据分析 RapidMiner

全新红娘交友系统定制版源码| 相亲交友小程序源码全开源可二开_

DUOKE七七

php 开源 uniapp

剖析——陪玩源码,陪玩平台搭建的各种必备功能与收益来源,游戏陪玩系统源码

DUOKE七七

php 开源 uniapp 陪玩系统源码

三面滴滴失败,总结了Java面试题,有几个题还是一直搞不懂

Summer

Java 程序员 面试 架构师 大厂

部署有声读物和播客的自托管媒体服务器Audiobookshelf

轶天下事

如何找到可靠的海外云服务器租用商

Ogcloud

云服务器 香港云服务器 美国云服务器 海外云服务器 云服务器租用

聚力创新|首届BIOV生命科技与再生医疗国际峰会在泰国曼谷圆满举行

TechubNews

向量更新的3种方式

DashVector

人工智能 数据库 大模型

指标管理+AI大模型深度融合,开启智能数据分析管理新时代

袋鼠云数栈

大语言模型的上下文窗口 (Context Windows)

澳鹏Appen

文本生成 LLM 大语言模型

华为阅读年度榜单揭晓:汇聚精品内容,打造沉浸式阅读盛宴

最新动态

阿里发布多模态推理模型 QVQ-72B,视觉、语言能力双提升;OpenAI 正在研发人形机器人丨 RTE 开发者日报

声网

向量检索的3种方式

DashVector

人工智能 数据库 向量检索 大模型

轻至986g,续航18小时、120TOPS算力!ThinkPad X1 Carbon Aura AI元启版刷新商务AI PC巅峰体验

科技范儿

Gate.io 平台通证 GT:持续赋能与销毁、财富效应显著

股市老人

探索Flink动态CEP:杭州银行的实战案例

Apache Flink

大数据 flink 数据分析 CEP 实时处理

性能优化!突破性能瓶颈的尖兵CPU Cache

不在线第一只蜗牛

性能优化

Flexus云服务器X实例赋能,用Python将微信公众号秒变智能聊天机器人

轶天下事

ByConity BSP 解锁数据仓库新未来

网罗开发

阿里大佬翻遍全网Java面试文章,总结出这份1658页文档,GitHub收获25K+点赞

Summer

Java 程序员 面试 架构师 大厂

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