开发者社区> 问答> 正文

我如何优化MySQL的ORDER BY RAND()函数?

我想优化查询,以便进行调查mysql-slow.log。

我的大多数慢查询都包含ORDER BY RAND()。我找不到解决此问题的真正解决方案。在MySQLPerformanceBlog上有一个可能的解决方案,但我认为这还不够。在优化不佳(或频繁更新,用户管理)的表上,该表不起作用,或者我需要运行两个或多个查询才能选择PHP生成的随机行。

这个问题有解决方案吗?

一个虚拟的例子:

SELECT accomodation.ac_id, accomodation.ac_status, accomodation.ac_name, accomodation.ac_status, accomodation.ac_images FROM accomodation, accomodation_category WHERE accomodation.ac_status != 'draft' AND accomodation.ac_category = accomodation_category.acat_id AND accomodation_category.acat_slug != 'vendeglatohely' AND ac_images != 'b:0;' ORDER BY RAND() LIMIT 1

展开
收起
保持可爱mmm 2020-05-10 17:53:34 899 0
1 条回答
写回答
取消 提交回答
  • 我想优化查询,以便进行调查mysql-slow.log。

    我的大多数慢查询都包含ORDER BY RAND()。我找不到解决此问题的真正解决方案。在MySQLPerformanceBlog上有一个可能的解决方案,但我认为这还不够。在优化不佳(或频繁更新,用户管理)的表上,该表不起作用,或者我需要运行两个或多个查询才能选择PHP生成的随机行。

    这个问题有解决方案吗?

    一个虚拟的例子:

    SELECT accomodation.ac_id, accomodation.ac_status, accomodation.ac_name, accomodation.ac_status, accomodation.ac_images FROM accomodation, accomodation_category WHERE accomodation.ac_status != 'draft' AND accomodation.ac_category = accomodation_category.acat_id AND accomodation_category.acat_slug != 'vendeglatohely' AND ac_images != 'b:0;' ORDER BY RAND() LIMIT 1来源:stack overflow

    2020-05-10 17:53:53
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像