2

我有一个只有一列的 mysql 表,该列有一些 3 个字母的单词和一些 4 个字母的单词,以及一些 5 和 6 个字母的单词。

我想要一个查询首先从所有 3 个字母的单词中随机选择,当它们都消失时,然后转到 4 个字母的单词,依此类推。

这是我的查询:

SELECT `word` FROM `words` ORDER BY LENGTH(`word`) ASC, RAND() LIMIT 1

到目前为止,这在我尝试过的几次中都按预期工作,但我想确保它总是这样工作。

4

1 回答 1

2

您的查询对我来说看起来不错,但我希望表很小,因为 MySQL 每次都会扫描所有行,然后使用 filesort,全部返回一行。

添加一wordlength列并为其编制索引不会改进查询,因为该ORDER BY RAND()函数会使索引的使用无效。

考虑根据它们的长度将单词分成单独的表,至少您只会扫描所有行以查找相同长度的单词。先从three_letter_words 表中选择,如果没有结果,再从four_letter_words 表中选择,以此类推。

于 2012-05-02T00:19:25.640 回答