[点晴永久免费OA][转帖]什么时候 MySQL 查询会变慢?
当前位置:点晴教程→点晴OA办公管理信息系统
→『 经验分享&问题答疑 』
索引创建的好,并不意味着查询就一定快,影响查询效率的因素特别多,今天我们就来聊一聊这些可能影响到查询的因素。 1. 查询流程开始今天的内容之前,先来和小伙伴们大概捋一捋 MySQL 的查询流程。我们来看如下一张图:
这张图大家大概有个印象,在后续的 MySQL 查询和优化中,很多东西就容易理解了。 接下来我们就来看看什么情况下查询会变慢。 2. 查询了不需要的记录数据按需取用。有时候我们会忽略多拿数据对查询性能的影响,然而优化是一个锱铢必较的事情,需要多少数据就查询多少,要尽量避免数据库查询 100 条,结果前端只展示 10 条这种情况。如有需要,可以通过 limit 来限制数据库查询出来的数据总量。
3. 返回需要的列查询的时候尽量避免 特别是有的时候多表联合查询,如果用 在前面的文章中,松哥也和大家提到过覆盖索引,如果索引设计得当,那么在查询的时候可以通过覆盖索引来提高查询的性能,但是如果使用了 4. 恰到好处的缓存这里举一个 TienChin 项目的例子,用户登录成功之后,在后续的流程中,经常会用到当前登录用户的信息,如果每次都去数据库查询,每次查询返回结果都是一致的,没有必要,此时我们可以将用户信息存入到 Redis 缓存中,需要的时候从 Redis 中提取就可以了。 在项目中,对于这些需要多次频繁查询,且每次查询返回结果一样的数据,都可以选择将之存入到缓存中以提高查询性能。 5. 关注扫描行数在查询的时候,我们可以通过 explain 来查看执行计划,执行计划中有一个指标是扫描行数,如下图中的 rows,这个就表示查询优化器预估要扫描多少行记录,filtered 则表示预估满足条件的比例。
6. 关注扫描类型这一条实际上就是让大家关注前面查询计划中的 type 字段的值,type 字段的取值有很多种,例如常见的 index、ALL、range、const 以及 ref,还有一些不常见的如 system、eq_ref、fulltext、ref_or_null、index_merge、unique_subquery、index_subquery 等,每一种都代表了不同的查询计划,再结合查询计划中的 Extra 字段中的值,我们大致上可以将查询分为三种类型:
该文章在 2023/7/20 14:32:23 编辑过 |
关键字查询
相关文章
正在查询... |