这个查询会按预期工作吗?

时间:2012-05-01 23:34:52

标签: mysql database

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

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

这是我的疑问:

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

到目前为止,我已经尝试了几次,但是我希望确保它总能像这样工作。

1 个答案:

答案 0 :(得分:2)

您的查询对我来说很好,但我希望该表很小,因为MySQL每次都会扫描所有行,然后使用filesort,所有这些都返回一行。

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

考虑将单词拆分为单独的表,具体取决于它们的长度,至少您只扫描所有行以查找相同长度的单词。首先从three_letter_words表中选择,如果没有结果,则从four_letter_words表中选择,依此类推。