MySQL ORDER BY 键值对键为主键

MySQL ORDER BY key-value pairs key being primary key

我想知道是否有任何简单的方法通过使用作为查询参数提供的键值对来排序 MySQL select 结果?

我有一个查询,当前通过对多列进行排序来计算顺序,其中一些是即时计算的(来自相关 table 的行数),而且速度非常慢。我无法缓存整个结果,因为还有许多其他过滤器可应用于此查询。我想到了为排序生成缓存,因为我不需要经常更改它(它会定期失效)。我想将此订单存储在 Redis 中。所以我会有这样的东西(ID:order - 越高越好):

有什么办法可以实现吗?或者可能只是存储排序的 ID 数组(没有顺序,在这里似乎是多余的)。并以类似的方式使用?

编辑

我找到了可能是我需要的函数 FIELD(<field>, values ...)。我想我必须先测试它,看看它是否解决了我的查询时间长的问题(因为我也读过 FIELD 也很慢)。

因此,在我发现 MySQL 的 FIELD 功能后,我决定对其进行测试,仅此而已。

由于我的查询的瓶颈是相关 table 中执行计数的数据量,table 的快速增长使查询越来越慢。现在,我从查询中删除了相关的 table。我改为在后台生成订单(使用原始查询)并缓存匹配 table 我需要排序的 PK 的有序 ID 集。

因为新查询没有 "touch" 相关的 table 它只取决于 FIELD 函数的速度和 "root" table 中的行数查询,这几乎是不变的。

通过这样做,我设法实现了 3000% 的查询速度提升(1.5s~ 到 0.05s~)。