我有以下查询:
(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/