我想知道是否有任何简单的方法可以通过使用作为查询参数提供的键值对来订购MySQL选择结果?
我有一个查询,当前通过对多列进行排序来计算顺序,其中一些是动态计算的(相关表中的行数)并且它非常慢。我无法缓存整个结果,因为有很多其他过滤器可以应用于此查询。我想为生成缓存进行排序,因为我不需要经常更改它(它会定期无效)。我想将此订单存储在Redis中。所以我会有这样的事情(ID:订单 - 更高更好):
有什么办法可以实现吗?或者只是存储已排序的ID数组(没有顺序,这里看起来多余)。并以类似的方式使用?
我找到了函数FIELD(<field>, values ...)
,这可能就是我所需要的。我想我必须首先测试一下,看看它是否会在查询时间过长的情况下解决我的问题(因为我也读过FIELD
也很慢)。
答案 0 :(得分:0)
所以,在我关于MySQL的FIELD
功能的发现后,我决定测试它,就是这样。
由于我的查询的瓶颈是相关表中的数据量,执行计数,该表的快速增长使得查询越来越慢。现在,我从查询中删除了相关表。我改为在后台生成订单(使用原始查询)并缓存与我需要排序的表的PK匹配的有序ID集。
因为新查询没有&#34;触摸&#34;相关的表只取决于FIELD
函数的速度和&#34; root&#34;中的行数。查询表,这是非常不变的。
通过这样做,我设法实现了3000%的查询速度提升(1.5s~0.05s~)。