如何使用 RAND() 优化慢速 SQL 语句



我目前正在从事一个项目,该项目有一个非常大的用户数据库及其不同级别,但是我们使用 RAND(( 并且由于数据库需求的增长,我们开始从我们的网络主机收到非常高的 MySQL CPU 使用率警告。

因此,我们需要优化这个特定的查询,以帮助减少 mysqli 调用......

存储大部分数据的行 LINK接近 50,000 + 个条目,使用 RAND(( 正在慢慢杀死网站。

我们将如何优化它以减少 mysqli 调用的数量。

$CALLROW = $db->CacheGetAll("SELECT `ID`, `TITLE` FROM `{$tables['link']['name']}` WHERE (`FEATURED` = '1' OR `FEATURED_ADVANCED`= '1' OR `FEATURED_NORMAL`= '1') AND `STATUS` = '2' {$expire_where} ORDER BY RAND() LIMIT 20");
$tpl->assign('CALLROW', $CALLROW);

我们如何减少上述 SQL 语句上的内存印记?

经过尝试,我想出了这个错误

$CALLROW = $db->CacheGetAll("SELECT * FROM `{$tables['link']['name']}` WHERE `FEATURED` = '1' OR `FEATURED_ADVANCED`= '1' OR `FEATURED_NORMAL`= '1' AND `STATUS` = '2' AND ID >= RAND() * (SELECT MAX(ID) FROM `{$tables['link']['name']}`) LIMIT 15");
$tpl->assign('CALLROW', $CALLROW);

但是在我刷新后,它会拉一些不同的,但从来没有FEATURED_ADVANCED或FEATURED_NORMAL它似乎只先拉出特色 ID

关于如何真正洗牌这些的任何想法

最新更新