作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想知道是否有任何简单的方法可以通过使用作为查询参数提供的键值对来对 MySQL 选择结果进行排序?
我有一个查询,目前通过对多列进行排序来计算顺序,其中一些是即时计算的(相关表中的行数),而且速度很慢。我无法缓存整个结果,因为还有许多其他过滤器可应用于此查询。我想到了为排序生成缓存,因为我不需要经常更改它(它会定期失效)。我想将此订单存储在 Redis 中。所以我会有这样的东西(ID:order - 越高越好):
有什么办法可以实现吗?或者可能只是存储排序的 ID 数组(没有顺序,在这里似乎是多余的)。并以类似的方式使用?
我找到了函数 FIELD(<field>, values ...)
这可能是我需要的。我想我必须先测试它,看看它是否克服了我的查询时间长的问题(因为我也读过 FIELD
也相当慢)。
最佳答案
因此,在我发现有关 MySQL 的 FIELD
功能之后,我决定对其进行测试,仅此而已。
由于我的查询的瓶颈是相关表中执行计数的数据量,该表的快速增长使查询越来越慢。现在,我从查询中删除了相关表。我改为在后台生成订单(使用原始查询)并缓存与我需要排序的表的 PK 匹配的有序 ID 集。
因为新查询不会“触及”相关表,它只取决于 FIELD
函数的速度和查询“根”表中的行数,这几乎是常量。
通过这样做,我设法实现了 3000% 的查询速度提升(从 1.5s~ 到 0.05s~)。
关于MySQL ORDER BY 键值对键为主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44201173/
我是一名优秀的程序员,十分优秀!