MySQL查询优化: UNION with rand()

标签 mysql

我有以下查询:

    (SELECT ad_code, ad_zone FROM on_ads WHERE ad_zone = 1 AND status = '1' ORDER BY RAND() LIMIT 1) UNION (SELECT ad_code, ad_zone FROM on_ads WHERE ad_zone = 2 AND status = '1' ORDER BY RAND() LIMIT 1);

它在我的服务器中被记录为慢速查询。我正在努力优化它。我尝试了以下查询

    (SELECT ad_code, ad_zone FROM on_ads WHERE ad_zone = 1 AND status = '1' OR ad_zone = 2 AND status = '1' ORDER BY RAND() LIMIT 2)

但此查询的问题在于,第一个查询选择了两个随机行,其中一个 ad_zone=1,另一个 ad_zone=2。虽然我选择了两行,但不能保证它会选择两行不同的行(一行的 ad_zone=1 和另一行的 ad_zone=2)。 我应该做什么来优化这个查询?

最佳答案

你必须尝试这样的事情:

(SELECT DISTINCT(ad_code), ad_zone FROM on_ads WHERE (ad_zone = 1 OR ad_zone = 2) AND status = '1' ORDER BY RAND() LIMIT 2)

关于MySQL查询优化: UNION with rand(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21683712/

相关文章:

php - 遇到此错误的问题

mysql - WordPress 的 PhpMyAdmin 查询

php - 更新 mysql 数据库中的一行?

php - 6 个月后将用户状态从 0 更改为 1

php - 选择 * 从表中按 TRIM 排序(全部 [ :nonalphnum:] FROM `title` )

php - 无法通过 SSH 从 apache 访问远程 MySQL

php - 具有自动递增功能的用户可格式化 ID

php - 锁定远程目录但不锁定 URL

php - 循环直到密码是唯一的

php - 为每组获取一行,其中包含订单和限制