Можете да добавите колона, напр. word_length
който съдържа дължината на думата и добавете индекс към word_length
колона. Обикновено би било лош дизайн да се включат данни, които могат да бъдат извлечени от друга колона, но в този случай трябва да нарушите чистотата в името на производителността. Тогава вашата заявка може да използва JOIN
условие с помощта на тази колона:
SELECT CONCAT(w1.my_word, w2.my_word) joined
FROM my_words w1
JOIN my_words w2 ON w1.word_length = 8 - w2.word_length
WHERE w2.word_length < 8
ORDER BY RAND()
LIMIT 5
Можете да използвате INSERT
и UPDATE
тригери за попълване на word_length
колона автоматично.
Може също да е полезно да направите конкатенацията след филтриране до 5-те реда:
SELECT CONCAT(word1, word2) joined
FROM (
SELECT w1.my_word word1, w2.my_word word2
FROM my_words w1
JOIN my_words w2 ON w1.word_length = 8 - w2.word_length
WHERE w2.word_length < 8
ORDER BY RAND()
LIMIT 5) x