服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - 数据库技术 - 分布式数据库索引能力大调研

分布式数据库索引能力大调研

2024-03-15 13:09韩锋频道 数据库技术

在分布式数据库情况下,索引又有所不同,其较单机或集中式数据库在设计、管理、优化方面有一定的差异。本文针对国内主流的一些分布式数据库,针对索引功能做了个小调研,希望对大家能有所帮助。

分布式数据库索引能力大调研

索引,是数据库中非常重要的一类对象。在数据库中增加索引,是常见的一种优化手段,特别是对于查询语句的优化,很多都可以通过增加索引方式来解决。在分布式数据库情况下,索引又有所不同,其较单机或集中式数据库在设计、管理、优化方面有一定的差异。本文针对国内主流的一些分布式数据库,针对索引功能做了个小调研,希望对大家能有所帮助。这里特别感谢来自奥神贝斯、平凯星辰、阿里云、腾讯云、金篆信科、万里开源老师的协助。

1. 索引概述

(1)索引优点与缺点

索引作为一种可选的数据结构,可有效提升基于索引字段的查询性能,用户可根据业务自身需求进行选择。其优点非常明显,即在不修改SQL语句的前提下可以加速查询,其原理是因为通过扫描索引减少了对原表的访问,进而节省了查询IO,提升性能。但索引也不是什么“银弹”,其缺点非常明显,索引作为一种数据库的结构,只要占据存储空间并会导致数据维护成本的提高。此外,随着业务调整变化,原索引也需要人工维护。

(2)分布式下索引特殊性

在分布式数据库中,数据是采用分片方式存储,即表中的数据存在在不同节点上。在索引中需要记录索引列及对应在原表中的位置,故其使用维护成本是比较高的。而且数据的拆分情况下,数据规模减少了很多,是否还需要通过索引加速访问也值得商榷。很多单机或集中式数据库迁移到分布式数据库时,其对应的索引策略是不建议直接平移过来,需要结合分片设计做单独考虑。

(3)索引使用建议

如何更好地使用索引,有一些通用的建议:

  • 索引建立,应遵循最左前缀原则。
  • 尽量选择基数较高的字段,所谓索引字段。
  • 为经常参加过滤、关联、排序的字段创建索引。
  • 可以利用覆盖索引,有效避免回表操作。

针对分布式数据库中的索引,有些不同的建议:

  • 减少不必要的全局索引,因为其维护代价很高。
  • 在数据分片下,数据规模进一步缩小,需考虑创建索引的必要性。

2. 索引能力大对比

近些年来,国内涌现出一大批分布式数据库产品,其架构不同、功能各异。用户在使用时,面临一个普遍问题就是选型,作为重要的考察功能之一,索引也是大家非常关注的一点。这里针对国内的一些主流分布式数据库在索引功能上的情况,做了个简单调研。

分布式数据库索引能力大调研

TiDB中的索引都被认为是全局索引,故不存在本地索引说法。

(1)索引类型

这里谈的索引类型,是指索引是否有独立的数据分布模式。也就是说,索引是否是按照跟表相同的数据分布方式,还是自己独立一套。前者通常被称为本地索引、局部索引,后者则被称为全局索引、二级索引等。对于本地索引而言,由于其数据分布与表相同,因此如果想使用使用是需要配合分区键的,能精确定位到分区的场景。对于全局索引而言,则没有这个限制,可以按照非分区键的维度进行查询。通常全局索引也是使用在不包含分区键的多维度查询场景。当然其付出的代价也很大,每一笔数据都有可能会演化为跨机的分布式事务,对数据库的吞吐、延时等都会造成影响。这里可参考下网上一篇评测报告。因此通常建议严格区分场景,优先使用本地索引来解决,确实不能解决的再考虑全局索引,但也要严格控制全局索引的个数。从产品上来看,大部分分布式数据库产品都支持了全局索引,这也是为了迎合用户之前基于单机/集中式数据库的使用习惯。当然这里还是强调下,在分布式数据库中不能一味迁就原有的结构设计,为了获得性能与效率的平衡,是需要考虑在应用侧做些妥协的。这里需要注意的是 TiDB,因其数据天然具备的自动拆分特点,其索引都可被视为全局索引。

(2)支持表类型

在分布式数据库中,索引支持在哪些表中创建。很多分布式数据库支持创建分区表(或叫分片表),也支持创建非分区表。对应的索引是否支持在不同类型的表上创建。一般情况下,分区表上可以创建分区索引(可能是全局的或本地的),非分区表没有创建分区索引的意义。从产品来看,大部分产品都支持在不同类型的表上创建索引。TiDB 因其自身技术设计,其表都为分区表,因此不涉及这个问题。

(3)索引唯一性

唯一索引可以确保表中的某个字段(或组合)的唯一性。在分布式数据库中,由于数据分片存储,确保唯一性是个挺难的事。因此大多数情况下,唯一索引是包含分区键的组合索引,这样维护的代价相对较小。从产品上看,上述产品都支持了索引的唯一性。

(4)索引列个数

索引字段可支持一个或多个。从产品上看,上述产品都支持单键索引和复合索引。

(5)索引有序

索引作为一种有序的数据存储结构,可以按照数据升序顺序存储,也可以按降序存储,因此创建的索引就有升序索引和降序索引。在进行数据排序类访问时(如Order By),可利用索引的有序性来提升访问性能。当访问操作需要按照不同于索引排序的方式访问时(如对索引列降序访问,但只存在升序索引),有的数据库是可以利用升序索引来解决,有的则只能退化为表扫描方式解决。例如在MySQL 8.0中就支持“Backward index scan”来解决此问题。从产品来看,部分产品支持降序索引,部分产品还不支持。

(6)特殊索引

除了常规的 BTree 索引外,有些数据库还支持特殊类型的索引,这里举例如空间索引和函数索引。前者是一种用于加速空间数据的查询的特殊索引类型,主要应用于地理信息系统(GIS)和空间数据处理领域;后者则是支持对函数或者表达式做索引。这些能力无疑会扩展索引的使用范围。从产品上看,厂商能力参差不齐,特别是针对空间索引。

(7)其他能力

索引的其他能力,这里列举了几种常见的。一是索引提示,针对复杂数据访问场景或优化器尚不稳定时,提示是一种有效的应急/规避手段。上述产品也都支持了此功能。索引合并,是指 Index Merge 功能,大部分产品已经支持,少数产品还不行。索引可见性则是指优化器是否忽略该索引,这对于索引维护、系统优化有一定帮助,上述产品也都支持了。最后则是索引强一致,这也是对索引的最基本要求,也是数据库与中间件产品的差异,上述产品也都支持。

原文地址:https://mp.weixin.qq.com/s/NVqZ-Y09HoSEIsYvzEgFBQ

延伸 · 阅读

精彩推荐
  • 数据库技术利用reverse索引优化like语句的方法详解

    利用reverse索引优化like语句的方法详解

    这篇文章主要介绍了关于利用reverse索引优化like语句的方法,文中通过图文介绍的很详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看...

    DoDBA6772021-10-27
  • 数据库技术DeepinV20快速安装Mariadb的详细步骤

    DeepinV20快速安装Mariadb的详细步骤

    本文给大家介绍DeepinV20安装Mariadb的详细步骤,MariaDB数据库管理系统是MySQL的一个分支,添加一些功能支持本地的非阻塞操作和进度报告,具体内容详情跟随...

    沉觞流年9382021-12-11
  • 数据库技术多条件查询的程序

    多条件查询的程序

    在一个网站中,常常会使用到查询功能。假设一个企业内部网中,用户信息里通常会涉及到工号、姓名、性别、学历、职业、职称、身份证号码、手机号码...

    数据库技术网9522021-10-06
  • 数据库技术实时监视同步数据库变更,这个框架真是神器

    实时监视同步数据库变更,这个框架真是神器

    我们数据库中的数据一直在变化,有时候我们希望能监听数据库数据的变化并根据变化做出一些反应,比如更新对应变化数据的缓存、增量同步到其它数据...

    码农小胖哥5032021-06-03
  • 数据库技术hadoop mapreduce中的文件并发操作

    hadoop mapreduce中的文件并发操作

    hadoop mapreduce最主要的应用是基于键值对的数据的运算,过滤,提取。但除此之外,我们可以顺带利用mapreduce高并发的特性做一些用常用方法难以处理的问题...

    数据库技术网6752021-10-19
  • 数据库技术十分钟教你写一个数据库

    十分钟教你写一个数据库

    今天教大家借助一款框架快速实现一个数据库,这个框架就是Calcite,下面会带大家通过两个例子快速教会大家怎么实现,一个是可以通过 SQL 语句的方式可...

    艾小仙8582022-10-13
  • 数据库技术使用Navicat生成ER关系图并导出的方法

    使用Navicat生成ER关系图并导出的方法

    这篇文章主要介绍了使用Navicat生成ER关系图并导出的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋...

    微雨燕凝霜寒7082021-12-06
  • 数据库技术深入解析阿里巴巴面试题SQL查询,你学会了吗?

    深入解析阿里巴巴面试题SQL查询,你学会了吗?

    今天要和大家分享的是在阿里巴巴面试中常见的SQL查询题目。SQL查询是数据库领域中的基础,但也是一个非常重要的技能,无论是在面试中还是实际工作中...

    知其然亦知其所以然6592024-02-28