mysql - 数据库 MySQL ORDER BY rand() 性能问题

  显示原文与译文双语对照的内容
105 4

我有一个相当低效的MySQL查询,直到最近数据库大大增长为止。我尝试使用 ORDER BY RAND() 语法来选择随机记录,但是它非常慢,并导致我的PHP脚本出现问题。是否有更有效的方法来编写这里查询?

 SELECT * FROM accountcampaign, accounts WHERE 
 accountcampaign.status='ACTIVE' 
 AND accountcampaign.dateLocked IS NULL
 AND accountcampaign.campaignID='1' 
 AND ( (accountcampaign.lockedIPAddress IS NULL) 
 OR (accountcampaign.lockedIPAddress='') 
 ) 
 AND ( (accountcampaign.dateLastEntry IS NULL) 
 OR (DATE(accountcampaign.dateLastEntry) <DATE(NOW())) 
 ) 
 ORDER BY RAND() LIMIT 1
时间:原作者:0个回答

135 5

你不希望使用ORDER BY RAND() LIMIT 1:它将为表格中的每一行生成一个随机数。

你应该尝试使用 2个查询:

  • 第一个计算表中的行数
  • 然后在PHP中生成一个介于 0和这个计数之间的随机数
  • 然后第二个查询只获取此行

这里的更多。

原作者:
...