我有一个只有一列的mysql表,该列有3个字母的单词和4个字母的单词,以及5个和6个字母的单词。
我想要一个查询,首先从所有3个字母单词中随机选择,当它们全部消失后,再转到4个字母单词,依此类推。
这是我的疑问:
SELECT `word` FROM `words` ORDER BY LENGTH(`word`) ASC, RAND() LIMIT 1
到目前为止,我已经尝试了几次,但是我希望确保它总能像这样工作。
答案 0 :(得分:2)
您的查询对我来说很好,但我希望该表很小,因为MySQL每次都会扫描所有行,然后使用filesort,所有这些都返回一行。
添加wordlength
列并对其编制索引不会改进查询,因为ORDER BY RAND()
函数会使索引的使用无效。
考虑将单词拆分为单独的表,具体取决于它们的长度,至少您只扫描所有行以查找相同长度的单词。首先从three_letter_words表中选择,如果没有结果,则从four_letter_words表中选择,依此类推。