找回密码
 立即注册
搜索
查看: 61|回复: 0

深度解析:「筛选」功能的逻辑与索引机制

[复制链接]

1

主题

0

回帖

3

积分

新手上路

积分
3
发表于 3 天前 | 显示全部楼层 |阅读模式
本帖最后由 热传网 于 2024-9-17 10:44 编辑

在做筛选功能时,总会遇到响应慢的问题:为什么点击筛选之后,要loading几秒?这类问题又不是功能设计的问题,作为产品的你不会代码,摸不透背后的原理,无疑会抓狂,甚至会想着自己去学开发。
那么下文会带你认识筛选背后的逻辑,理解程序是怎么从数据里筛选出来用户想要的内容,以及提高筛选速度背后的原理,助你更好地和开发做朋友。
本文阅读对象:产品经理(程序猿兄弟慎入)

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


2. 影响筛选速度的因素
影响筛选速度的主要因素包括
(1)数据量的大小
(2)索引的使用
(3)查询语句的复杂度
(4)数据库的硬件配置
数据量越大,筛选所需的时间通常越长。索引的使用可以显著提高筛选速度,尤其是对于大表的查询。查询语句的复杂度也会影响筛选速度,复杂的查询语句可能需要更多的计算资源。

3. 为什么要做索引
索引的工作原理类似于书籍的目录,它提供指向存储在表的指定列中的数据值的指针,然后根据指定的排序顺序对这些指针排序。当执行查询时,数据库系统首先查询索引,然后通过索引找到相关的数据,从而避免了扫描整个表,大大提高了查询效率。
简单理解,索引相当于提前对数据做了归类(目录),从而提高筛选查询速度。而且不同于书籍的只有1个目录,索引可以建多个。同时索引要建立正确才能有效提高筛选速度。
比如下方数据
3.webp

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

目标:筛选“天河区3居室”的房子,并且按照房子录入时间倒序排序分页返回结果。
索引可以组合多个字段进行创建,形成多列索引,上述例子可根据字段“区域”和“户型”创建1个索引,那么程序查询流程就变为如下,速度更快
上面只是对索引的简单理解,数据库可能会根据查询条件选择最优的查询路径,不只是“取交集”这种方式,如果想要了解这个内容,可请教研发人员

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

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


6. 索引怎么建立,是否需要全部字段都加索引
索引的建立需要根据具体的业务场景和查询需求来决定,并非所有字段都需要加索引。应选择区分度高、查询频率高的字段建立索引。
同时,索引的数量应适度,过多的索引会增加维护成本,影响数据更新操作的效率。相当于一本书籍,如果更新的书本内容,每次更新,目录也需要同步更新。那么如果索引(目录)有多个,那么每次更新数据,多个索引都需要同步更新。索引越多,维护成本越高。

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

如果需要查询某个用户的订单记录,结果需要返回:用户昵称、购买商品名称、商品图片、购买时间信息。那这种情况就需要联合用户表、订单表、商品表查询,才能获取想要的结果。
表关联过多确实会影响数据库查询速度。在进行多表关联查询时,尤其是涉及大量数据的表,可能会导致查询变慢。这是因为MySQL需要处理更多的表顺序和复杂的查询逻辑,从而增加了查询的时间成本。
此外,当使用多个大表进行关联查询时,如果其中一张表的数据量非常大,那么查询效率会进一步降低。在这种情况下,可以通过优化索引设计来提高查询效率。

8. 数据库服务器cpu满了?是什么意思?
CPU 是计算机的大脑,负责执行和处理各种任务和程序运行所需的所有指令和计算。CPU 使用率是指计算机的中央处理单元 (CPU) 消耗的处理时间量。
当你在计算机上运行程序或执行任务时,CPU 会处理并执行指令。CPU 使用率表明在任何给定时间有多少 CPU 容量被利用。它以百分比来衡量,100% 代表 CPU 处理能力的完全利用率。
当数据库服务器的CPU满载时,可能会导致系统响应变慢或完全停止响应。在运维过程中,经常会遇到MySQL数据库占用CPU过高的情况,导致系统性能下降,甚至引发系统崩溃。
导致CPU满载的原因可能有如下两种:
1、自身服务导致
如果代码出错或业务发展访问量增加所导致的,如果是代码出错的话,那么就需要开发人员细心检查优化代码,紧急处理的话就是重启服务或者是服务器。如果是本身业务发展迅速导致的话,就建议及时升级配置,这种情况重启服务基本上没有什么用,因为CPU会马上跑满。
2、中毒导致
如果是中毒导致的CPU爆满,要立刻关闭进程,并使用杀毒工具进行病毒查杀。
本文来源@口述产品 。未经作者许可,禁止转载
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|ARC

GMT+8, 2024-9-20 05:34 , Processed in 0.165098 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表