gpt4 book ai didi

MySQL - 如何在使用多个过滤器查询时保持可接受的响应时间(我应该使用 Redis 吗?)

转载 作者:行者123 更新时间:2023-11-29 09:26:33 26 4
gpt4 key购买 nike

我有一个名为 users 的表,其中有几十列,例如 heightweightcity国家年龄性别等...

表格中唯一的键/索引是针对idemail列的。

我的网站上有一个搜索功能,可以根据这些不同的列过滤用户。该查询可以包含从零到几十个不同的 where 子句(例如 where `age` > 40)。

搜索设置为LIMIT 50ORDER BY `id`

数据库中目前约有 100k 行。

如果我使用零过滤器或松散过滤器执行搜索,mysql 基本上只返回前 50 行,而不必读取比这更多的行。完成此类查询通常需要不到 1 秒的时间。

如果我创建一个包含大量复杂过滤器的搜索(例如,5 个以上的 where 子句),MySQL 最终会读取整个数据库的 100k 行,尝试累积 50 个有效行,结果查询大约需要 30秒。

如何更有效地查询以缩短响应时间?

我愿意使用缓存(我已经将 Redis 用于其他缓存目的,但我不知道从哪里开始正确缓存 MySQL 表)。

我愿意添加索引,尽管可以构建许多不同的 where 子句组合。此外,其中几列是 JSON,我在其中搜索包含某些元素的行。据我所知,我认为索引对于这种类型的查询来说不是一个可行的解决方案。

我使用的是 MySQL 版本 8.0.15。

最佳答案

一般来说,您需要为 WHERE 子句的条件中提到的列创建索引。您还可以为 JSON 列创建索引,使用生成的列索引:https://dev.mysql.com/doc/refman/8.0/en/create-table-secondary-indexes.html .

关于MySQL - 如何在使用多个过滤器查询时保持可接受的响应时间(我应该使用 Redis 吗?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59519192/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com