我有一个只有一列的mysql表,该列包含一些3个字母单词和一些4个字母单词,以及一些5和6个字母单词。
我想要一个查询,首先从所有3个字母单词中随机选择,当它们都消失时,然后移动到4个字母单词,依此类推。
这是我的问题:
SELECT `word` FROM `words` ORDER BY LENGTH(`word`) ASC, RAND() LIMIT 1到目前为止,在我尝试过的几次中,它都像预期的那样工作,但我想确保它总是像这样工作。
发布于 2012-05-02 08:19:26
您的查询在我看来很好,但我希望表很小,因为MySQL每次都会扫描所有行,然后使用文件排序,所有这些操作都是为了返回一行。
添加wordlength列并对其进行索引不会改善查询,因为ORDER BY RAND()函数将使索引的使用失效。
考虑将单词拆分到单独的表中,这取决于它们的长度,至少您将只扫描相同长度的单词的所有行。首先从three_letter_words表中选择,如果没有结果,则从four_letter_words表中选择,依此类推。
https://stackoverflow.com/questions/10405800
复制相似问题