B端|一文讲透「筛选」功能背后的逻辑-索引

1 评论 4114 浏览 13 收藏 10 分钟

在做筛选功能是一般都要加载几秒,这种问题是如何产生的?这篇文章,作者为我们解答了这个问题,一起来看看。

在做筛选功能时,总会遇到响应慢的问题:为什么点击筛选之后,要loading几秒?这类问题又不是功能设计的问题,作为产品的你不会代码,摸不透背后的原理,无疑会抓狂,甚至会想着自己去学开发。

那么下文会带你认识筛选背后的逻辑,理解程序是怎么从数据里筛选出来用户想要的内容,以及提高筛选速度背后的原理,助你更好地和开发做朋友。

本文阅读对象:产品经理(程序猿兄弟慎入)

1. 关于筛选功能

筛选功能是SAAS产品设计中常见的一种功能,从而提高查询效率和准确性。筛选功能的实现通常依赖于SQL查询语句和数据库索引。

2. 影响筛选速度的因素

影响筛选速度的主要因素包括

(1)数据量的大小

(2)索引的使用

(3)查询语句的复杂度

(4)数据库的硬件配置

数据量越大,筛选所需的时间通常越长。索引的使用可以显著提高筛选速度,尤其是对于大表的查询。查询语句的复杂度也会影响筛选速度,复杂的查询语句可能需要更多的计算资源。

3. 为什么要做索引

索引的工作原理类似于书籍的目录,它提供指向存储在表的指定列中的数据值的指针,然后根据指定的排序顺序对这些指针排序。当执行查询时,数据库系统首先查询索引,然后通过索引找到相关的数据,从而避免了扫描整个表,大大提高了查询效率。

简单理解,索引相当于提前对数据做了归类(目录),从而提高筛选查询速度。而且不同于书籍的只有1个目录,索引可以建多个。同时索引要建立正确才能有效提高筛选速度。

比如下方数据

前提条件:已经分别对区域和户型建立索引(目录)

目标:筛选“天河区3居室”的房子,并且按照房子录入时间倒序排序分页返回结果。

1、程序先根据索引“区域”快速找到“天河区”的数据。如果没有索引,程序需要查询全表,分别判断没一条数据是否是“天河区”,才能查找出来“天河区”房源。有了目前相当于提前做好了初步的查询;

2、接着程序再根据索引“户型”快速找到“3居”的数据。让后将这两部分数据的交集取出来;

3、接着将2中的结果根据房源录入时间倒序排序;

4、对排序结果取相应的分页返回给客户端。

索引可以组合多个字段进行创建,形成多列索引,上述例子可根据字段“区域”和“户型”创建1个索引,那么程序查询流程就变为如下,速度更快

1、程序先根据索引快速找到“天河区3居”的数据;

2、接着将1中的结果根据房源录入时间倒序排序;

3、对排序结果取相应的分页返回给客户端。

上面只是对索引的简单理解,数据库可能会根据查询条件选择最优的查询路径,不只是“取交集”这种方式,如果想要了解这个内容,可请教研发人员

4. 索引对排序的影响

索引本身就是一种有序的数据结构,类似于书籍的目录。当查询需要排序时,如果排序字段已经建立了索引,数据库可以直接利用索引的有序性来返回排序后的结果,而不需要再进行额外的排序操作。这种方式可以显著减少排序的时间和资源消耗。但这里前提是用户想要的排序规则和索引的排序规则是相同的。

5. 多大数据量要加索引,以及能带来多大速度提升

根据文章《【实验】MySQL多少数据需要建立索引》,当数据量达到几十万条以后,索引的效果显著,能明显提升查询速度。数据量越大,索引越发重要。当数据量达到千万级别时,有无索引可导致性能相差千倍!因此,当数据量达到几十万条以上时,就应该考虑添加索引。

6. 索引怎么建立,是否需要全部字段都加索引

索引的建立需要根据具体的业务场景和查询需求来决定,并非所有字段都需要加索引。应选择区分度高、查询频率高的字段建立索引。

同时,索引的数量应适度,过多的索引会增加维护成本,影响数据更新操作的效率。相当于一本书籍,如果更新的书本内容,每次更新,目录也需要同步更新。那么如果索引(目录)有多个,那么每次更新数据,多个索引都需要同步更新。索引越多,维护成本越高。

7. 单表查询vs多表查询

如果从数据库里面一张数据表就能找到要的数据,那这种情况是最完美。但是1个复杂的系统,不可能用1张表存数据。比如1个电商系统,会存在如下多个表存储信息


如果需要查询某个用户的订单记录,结果需要返回:用户昵称、购买商品名称、商品图片、购买时间信息。那这种情况就需要联合用户表、订单表、商品表查询,才能获取想要的结果。

表关联过多确实会影响数据库查询速度。在进行多表关联查询时,尤其是涉及大量数据的表,可能会导致查询变慢。这是因为MySQL需要处理更多的表顺序和复杂的查询逻辑,从而增加了查询的时间成本。

此外,当使用多个大表进行关联查询时,如果其中一张表的数据量非常大,那么查询效率会进一步降低。在这种情况下,可以通过优化索引设计来提高查询效率。

8. 数据库服务器cpu满了?是什么意思?

CPU 是计算机的大脑,负责执行和处理各种任务和程序运行所需的所有指令和计算。CPU 使用率是指计算机的中央处理单元 (CPU) 消耗的处理时间量。

当你在计算机上运行程序或执行任务时,CPU 会处理并执行指令。CPU 使用率表明在任何给定时间有多少 CPU 容量被利用。它以百分比来衡量,100% 代表 CPU 处理能力的完全利用率。

当数据库服务器的CPU满载时,可能会导致系统响应变慢或完全停止响应。在运维过程中,经常会遇到MySQL数据库占用CPU过高的情况,导致系统性能下降,甚至引发系统崩溃。

导致CPU满载的原因可能有如下两种:

1、自身服务导致

如果代码出错或业务发展访问量增加所导致的,如果是代码出错的话,那么就需要开发人员细心检查优化代码,紧急处理的话就是重启服务或者是服务器。如果是本身业务发展迅速导致的话,就建议及时升级配置,这种情况重启服务基本上没有什么用,因为CPU会马上跑满。

2、中毒导致

如果是中毒导致的CPU爆满,要立刻关闭进程,并使用杀毒工具进行病毒查杀。

本文由 @口述产品 原创发布于人人都是产品经理。未经作者许可,禁止转载

题图来自Unsplash,基于CC0协议

该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
海报
评论
评论请登录
  1. 索引的数量应适度,过多的索引会增加维护成本,影响数据更新操作的效率。相当于一本书籍,如果更新的书本内容,每次更新,目录也需要同步更新。那么如果索引(目录)有多个,那么每次更新数据,多个索引都需要同步更新。索引越多,维护成本越高。

    来自广东 回复