四问复合索引让您的数据查询速度飙升

1. 什么是复合索引复合索引是用户手动建立的用于加速查询的一类额外数据。详细参数可以参考规格文档https://support.huaweicloud.com/

各位老铁们,大家好,今天由我来为大家分享四问复合索引让您的数据查询速度飙升,以及的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

2. 复合索引能做什么

复合索引有两种类型。一是标签索引,用于加速标签扫描。二是属性索引,用于加速属性过滤。

下面列出了一些常用接口(语句)和索引之间的关系

API接口

指数加速法

概括

扫描标签索引并统计每个标签的点数和边数

匹配(n:user)返回计数(*)

扫描点标签索引,统计标签为user的点的数量。

匹配()-[r:label]-() 返回count

扫描边缘标签索引并统计指定标签点的数量

匹配(n:user)返回n限制1

通过点标签索引快速找到带有标签用户的点

匹配(n:user) 其中n.age 10 返回n limit 1

当只有标签索引时,扫描标签索引,找到用户点,然后进行属性过滤。当存在年龄属性索引时,直接利用属性索引来定位目标点。

匹配(n:user) 其中n.age in [1, 10] 返回n limit 1

与上面相同

3. 无索引时如何查询

只有先了解没有索引的查询逻辑,才能在此基础上了解索引是做什么来加速查询的。查询逻辑主要涉及两个方面:数据结构、数据访问方式、查询场景。

a) 原始点结构

持久化版本中的所有数据均以KV(键值对)的形式存储在分布式KV数据库中。当没有创建索引时,数据库中只有原始的边KV。以点数据结构为例:

钥匙:

价值:

key的开头部分是kVType,它是一个固定的前缀,存在于所有数据中,用于区分不同类型的数据。那么Vid就是全局唯一的点id。 Labelid是标识标签的内置编码。值是属性的数据。

b) 数据访问方式

所有图数据查询最终都依赖于对KV数据库的访问。访问KV数据常用的方式有两种:

精准查询接口,指定完整的key查询值前缀查询接口,仅指定key的前缀部分,查询与所有key的前缀匹配的KV数据对。前缀查找相对来说使用得比较频繁。一个场景可能需要多个前缀搜索。前缀查询越多,得到的结果就越多,该场景对应的响应速度就会越慢。前缀搜索结果的大小与前缀的长度直接相关。前缀越长或越精确,前缀搜索结果就越少。需要更少的计算。响应速度会更快。

c) 查询场景:

常见查询场景对应的kv层接口调用:

场景

KV接口及调用次数

查询速度

对应的Cypher语句

按指定ID过滤

四问复合索引让您的数据查询速度飙升

前缀检查*1

速度很快。由于KVType 和Vid 已知,因此可以拼出前缀。同时,一个ID一般不会有太多的标签,前缀搜索的结果也不会特别大。

match(n) 其中id(n)=‘0’ 返回n

指定标签过滤器

前缀检查

n+过滤器

慢的。由于Vid未知,我们只能先拼出只有KVType的前缀,然后通过前缀找出所有的点,然后对标签进行一一过滤。当点数据较多时,会有多次前缀检查,批量获取,然后过滤。

匹配(n:Label)返回n

指定标签+属性过滤

前缀检查

n+过滤器

慢的。查询前缀是KvType。它遍历所有图像点,先进行Label过滤,然后进行属性过滤。

匹配(n:Label) 其中n.prop=‘xx’ 返回n

指定属性过滤器

前缀检查

n+过滤器

非常慢。查询前缀为KvType,遍历所有地图点,对所有进行属性过滤

匹配(n) 其中n.prop=‘xx’ 返回n

可以看到,除了指定id的查询外,其他所有查询都非常慢。这些查询需要完整的地图点扫描和过滤才能获得结果。这与查询得到的结果数量无关。对于较大的图,这样的查询非常昂贵。

4. 复合索引如何加速

慢查询有两种场景:标签查询或属性查询。在没有索引的情况下,两个查询都是基于全局点扫描进行过滤。当有效数据比例较低时(例如1w个全局点,只有1个目标点),这种扫描方法的性价比就变得较低。

针对这两种场景,我们可以创建相应的索引。索引本身也是KV数据。因此,其按键的布局决定了其功能。

1、对于标签过滤场景,索引键的格式为:

对于每个点,都会有一个对应的Label索引KV。

当需要过滤特定Label时,可以拼出KVType+Label的前缀,利用kv数据库的前缀查询接口,直接过滤掉所有符合条件的点。

2、对于属性过滤场景,索引的key格式为:

属性索引仅针对过滤频率较高的单个属性创建。因此,属性索引kv 只会为包含该属性的点生成。与Label索引相比,只是多了一个属性字段。该字段填充Vid点对应的属性值。需要注意的是,属性字段并不包含所有点属性,仅包含要过滤的属性值。

在进行属性查询时,由于目标值是已知的(例如n.prop=1,则目标值为1)。直接拼出KVTypr+Label+Property,调用前缀查询接口。凡是符合条件的点都可以找到。

利用索引找出匹配的索引KV后,就可以轻松得到对应的VId。然后根据这个Vid,就可以快速查询到这个点的属性、邻居等信息。

用户评论

四问复合索引让您的数据查询速度飙升
走过海棠暮

这个 TITLE 真是太棒了!我一直以来都觉得数据查询的速度实在太慢,这篇文章彻底解决了我的困惑。真的应该把这种方法推广到各个领域啊!

    有17位网友表示赞同!

四问复合索引让您的数据查询速度飙升
红尘烟雨

我曾经也遇到过类似的问题,有时候需要查询大量的数据,查询速度让人崩溃!看了这篇博文后觉得复合索引这个概念很有意思,以后一定要学习一下怎么应用。

    有5位网友表示赞同!

四问复合索引让您的数据查询速度飙升
花菲

说的没错,数据查询的速度确实关系到开发效率和用户体验。这款“四问复合索引”看起来很厉害的样子,可以加速我的代码运行?

    有15位网友表示赞同!

四问复合索引让您的数据查询速度飙升
敬情

我一直不太理解这些技术指标,不知道有没有更通俗易懂的解释?感觉标题里的“飞起”有点夸大其词啊。

    有6位网友表示赞同!

四问复合索引让您的数据查询速度飙升
自繩自縛

看了这篇文章后对复合索引有了一些了解,原来还有很多种不同的查询方式可以让我效率更高!这个东西太棒了,我马上就应用到我的项目中去!

    有14位网友表示赞同!

四问复合索引让您的数据查询速度飙升
莫失莫忘

数据查询的速度确实非常重要,尤其是当要处理的数据量庞大的时候。但这篇文章感觉讲的有点浅,希望作者能详细讲解一下每一项复合索引,以及如何选择合适的索引类型。

    有20位网友表示赞同!

四问复合索引让您的数据查询速度飙升
tina

这个标题吸引我了,我一直寻找高效数据查询的方法,这种“复合索引”听起来很有意思。文章内容很专业,我希望能够在实践中运用到这些技巧。

    有9位网友表示赞同!

四问复合索引让您的数据查询速度飙升
嘲笑!

我目前在学习数据库设计,这篇文章的介绍正好符合我的需求!希望还有更多类似的文章来讲解一些更进阶的技术细节。

    有5位网友表示赞同!

四问复合索引让您的数据查询速度飙升
栀蓝

说的的确是,数据查询速度对整个项目的性能有很大影响。复合索引是一个不错的解决方案,不过需要注意其维护成本和潜在的影响。需要根据实际情况进行评估和选择。

    有17位网友表示赞同!

四问复合索引让您的数据查询速度飙升
喜欢梅西

感觉这篇文章有点理论性太强,缺少一些实用的案例分析。希望能看到更多具体的应用场景和代码实现。

    有6位网友表示赞同!

四问复合索引让您的数据查询速度飙升
鹿先森,教魔方

我一直觉得数据查询的速度瓶颈很难突破,没想到还有这种“复合索引”这个方法存在!我要赶紧去试试看效果怎么样了。

    有19位网友表示赞同!

四问复合索引让您的数据查询速度飙升
别伤我i

对数据库优化一直不太懂,看了这篇文章后有所了解,不过觉得内容有点复杂,需要多学习和实践才能掌握。

    有10位网友表示赞同!

四问复合索引让您的数据查询速度飙升
别悲哀

文章介绍的四问复合索引听起来很方便实用,不知道实际运用中会有哪些需要注意的地方?

    有9位网友表示赞同!

四问复合索引让您的数据查询速度飙升
眷恋

我一直很关心数据库的性能优化,这篇文章提到的“飞起”确实很吸引人!希望作者能进一步详细讲解这个效果是如何实现的。

    有14位网友表示赞同!

四问复合索引让您的数据查询速度飙升
有一种中毒叫上瘾成咆哮i

这个想法很好,但是对于一些不太熟悉数据库的人来说,可能难以理解四问复合索引的概念。建议可以添加一些简单易懂的解释和案例,方便初学者入门。

    有17位网友表示赞同!

四问复合索引让您的数据查询速度飙升
Hello爱情风

数据查询速度真的会影响到整个系统的体验,所以这种高效的数据存储和查询技术非常重要。期待看到更多类似的文章,分享更深入的数据库优化技巧!

    有5位网友表示赞同!

四问复合索引让您的数据查询速度飙升
微信名字

感觉文章缺乏对不同数据结构和应用场景的区分,复合索引是否适用于所有情况?建议作者能针对不同的情况给出更具体的解决方案和指导。

    有13位网友表示赞同!

原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/164675.html

(0)
小su的头像小su
上一篇 4小时前
下一篇 4小时前

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注